├── LICENSE
├── README.md
├── blackbox
├── black_box.glsl
├── black_box.png
└── blackbox.pde
├── blocks_color_bright
├── blocks_bright.glsl
├── blocks_bright.png
└── blocks_color_bright.pde
├── blocks_color_dark
├── blocks_color_dark.pde
├── blocks_dark.glsl
└── blocks_dark.png
├── chladni
├── chladni.glsl
├── chladni.pde
└── chladni.png
├── gooey
├── gooey.glsl
├── gooey.pde
└── gooey.png
├── index.html
├── klimt
├── klimt.glsl
├── klimt.pde
└── klimt.png
├── logo.png
├── monolith
├── monolith.glsl
├── monolith.pde
└── monolith.png
├── noisy_cone
├── noisy_cone.glsl
├── noisy_cone.pde
└── noisy_cone.png
├── panopitcon
├── panopitcon.glsl
├── panopitcon.pde
└── panopitcon.png
├── polygons
├── polygons.glsl
├── polygons.pde
└── polygons.png
├── vorogrid
├── vorogrid.glsl
├── vorogrid.pde
└── vorogrid.png
└── waves
├── waves.glsl
├── waves.pde
└── waves.png
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 nicolas barradeau
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | ### BUMP visuals
3 |
4 | the following is my contribution to a gig performed by [No computer](http://nocomputer.be/). it's a series of 2D shaders that will potentially be displayed on a big screen during the [Bump festival in Kortrijk on the 24th of june 2016](http://bump-festival.be/).
5 | it is mostly hacked from the following shaders:
6 |
7 | [https://www.shadertoy.com/view/MlXGDf](https://www.shadertoy.com/view/MlXGDf), [https://www.shadertoy.com/view/Xds3zN](https://www.shadertoy.com/view/Xds3zN) & [http://thebookofshaders.com/](http://thebookofshaders.com/)
8 |
9 | the basic setup is a [Processing 3](https://processing.org/download/?processing) sketch with the following code:
10 |
11 | PShader shader;
12 | String name = "shader_name";
13 |
14 | void setup() {
15 | size( 1200, 500, P3D );
16 | noStroke();
17 | shader = loadShader( name + ".glsl");
18 | }
19 |
20 | void draw() {
21 |
22 | shader.set("u_resolution", float(width), float(height));
23 | shader.set("u_time", 1000 + millis() / 1000.0);
24 |
25 | shader(shader);
26 | rect(0,0,width,height);
27 |
28 | }
29 |
30 | void keyPressed(){
31 | shader = loadShader( name + ".glsl");
32 | saveFrame( name + ".png" );
33 | }
34 |
35 | pressing any key will reload the shader an take a snapshot.
36 | you can copy paste any of the following snippets (click editor to open the code)
37 | click on the preview link to watch a live version.
38 |
39 |
125 |
126 | the code is not commented and not optimised at all, just putting it here for the sake of sharing.
127 | not sure if any of those will make it to the big screen but it was fun to make :)
128 |
--------------------------------------------------------------------------------
/blackbox/black_box.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: black box
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159265359
9 |
10 | #define PROCESSING_COLOR_SHADER
11 |
12 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
13 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
14 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
15 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
16 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
17 |
18 | uniform vec2 u_resolution;
19 | uniform vec2 u_mouse;
20 | uniform float u_time;
21 |
22 | const float MAX_TRACE_DIST = 5.0;
23 | const float MIN_HIT_DIST = 0.001;
24 | const int MAX_NUM_STEPS = 20;
25 |
26 | float roundBox( vec3 p, vec3 b, float r ){ return length(max(abs(p)-b,0.0)); }
27 |
28 | vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
29 | vec2 mod289(vec2 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
30 | vec3 permute(vec3 x) { return mod289(((x*34.0)+1.0)*x); }
31 |
32 | float snoise(vec2 v){
33 | const vec4 C = vec4(0.211324865405187,
34 | 0.366025403784439,
35 | -0.577350269189626,
36 | 0.024390243902439);
37 | vec2 i = floor(v + dot(v, C.yy) );
38 | vec2 x0 = v - i + dot(i, C.xx);
39 | vec2 i1;
40 | i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
41 | vec4 x12 = x0.xyxy + C.xxzz;
42 | x12.xy -= i1;
43 | i = mod289(i);
44 | vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))
45 | + i.x + vec3(0.0, i1.x, 1.0 ));
46 | vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
47 | m = m*m ;
48 | m = m*m ;
49 | vec3 x = 2.0 * fract(p * C.www) - 1.0;
50 | vec3 h = abs(x) - 0.5;
51 | vec3 ox = floor(x + 0.5);
52 | vec3 a0 = x - ox;
53 | m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
54 | vec3 g;
55 | g.x = a0.x * x0.x + h.x * x0.y;
56 | g.yz = a0.yz * x12.xz + h.yz * x12.yw;
57 | return 130.0 * dot(m, g);
58 | }
59 |
60 | float getColor( in vec2 uv )
61 | {
62 | float m = 1.25;
63 | float t = u_time * .1;
64 | float noise = snoise( vec2( m*uv.x+t, m * uv.y -t ));
65 | noise += abs(snoise( uv));
66 | return abs( noise * 2.);
67 | }
68 |
69 | mat3 rotationMatrix(vec3 axis, float angle)
70 | {
71 | axis = normalize(axis);
72 | float s = sin(angle);
73 | float c = cos(angle);
74 | float oc = 1.0 - c;
75 | return mat3(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s,
76 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,
77 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c );
78 | }
79 |
80 | vec2 map(in vec3 pos, in vec2 uv){
81 |
82 | float freq = getColor( uv );
83 | float box = max( roundBox( pos+vec3( .0,0.,0. ), vec3( 0.5,.5,.5), .1500), -( length( pos ) - .65 ) );
84 | float n = 0.05 * sin(freq * pos.x ) * sin(freq * pos.y * .8) * sin(freq * pos.z);
85 | return vec2( box - n, 1. );
86 | }
87 |
88 | float softshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax, in vec2 uv ){
89 | float res = 1.0;
90 | float t = mint;
91 | for(int i = 0; i < 16; ++i)
92 | {
93 | float h = map(ro + rd * t, uv).x;
94 | res = min(res, 8. * h / t);
95 | t += clamp(h, 0.02, 0.10);
96 | if(h < 0.001 || t > tmax) break;
97 | }
98 | return clamp( res, 0.0, 1.0 );
99 | }
100 |
101 | vec3 calcNormal(in vec3 pos, in vec2 uv )
102 | {
103 | vec3 eps = vec3(0.001, 0.0, 0.0);
104 | vec3 nor = vec3(
105 | map(pos+eps.xyy, uv).x - map(pos-eps.xyy, uv).x,
106 | map(pos+eps.yxy, uv).x - map(pos-eps.yxy, uv).x,
107 | map(pos+eps.yyx, uv).x - map(pos-eps.yyx, uv).x);
108 | return normalize(nor);
109 | }
110 |
111 |
112 | float calcIntersection(in vec3 ro, in vec3 rd, in vec2 uv ){
113 |
114 | float h = MIN_HIT_DIST * 2.0;
115 | float t = 0.0;
116 | float finalDist = -1.0;
117 | for(int i = 0; i < MAX_NUM_STEPS; ++i){
118 | if(h < MIN_HIT_DIST || t > MAX_TRACE_DIST) break;
119 |
120 | vec2 distToClosest = map(ro + rd * t, uv);
121 | h = distToClosest.x;
122 | t += h;
123 | }
124 | if(t < MAX_TRACE_DIST) finalDist = t;
125 | return finalDist;
126 | }
127 |
128 | vec3 render(in vec3 ro, in vec3 rd, in vec2 uv) {
129 |
130 | float ssDistToCenter = length(uv);
131 | vec3 bgColor1 = vec3(0.6, 0.2, 0.9);
132 | vec3 bgColor2 = vec3(0.0, 0.2, 0.8);
133 | vec3 surfaceColor = vec3(1.);
134 |
135 | float results = calcIntersection(ro, rd, uv);
136 | float t = results;
137 |
138 | vec3 lightPos = ( vec3( 0.,0.700,0.0) );
139 | if( t > -.5 ){
140 | vec3 pos = ro + rd * t;
141 | vec3 n = calcNormal(pos, uv);
142 | vec3 diffColor = orange;
143 | vec3 l = normalize(pos-lightPos );
144 | float diffStrength = max( pow( dot(n, l), 9. ), 0.0 );
145 | float ambientStrength = clamp(0.05 + .5 * n.y, 0.0, 1.0);
146 | vec3 ambientColor = blue;
147 |
148 | diffColor *= softshadow( pos, lightPos, 0.02, 2.5, uv );
149 | ambientColor *= ambientStrength*.9;
150 | surfaceColor = ( diffStrength * diffColor + ambientColor );
151 | }
152 |
153 | return surfaceColor;
154 | }
155 |
156 | mat3 setCamMatrix(in vec3 ro, in vec3 ta, float roll)
157 | {
158 | vec3 ww = normalize(ta - ro);
159 | vec3 uu = normalize(cross(ww, vec3(sin(roll), cos(roll), 0.0)));
160 | vec3 vv = normalize(cross(uu, ww));
161 | return mat3(uu, vv, ww);
162 | }
163 |
164 | void main(){
165 |
166 | vec2 p = 2.*gl_FragCoord.xy/u_resolution.xy-1.;
167 | p.x *= u_resolution.x/u_resolution.y;
168 |
169 | float radius = 1.35;
170 | float camX = radius * cos(u_time * 0.1);
171 | float camY = radius;
172 | float camZ = radius * sin(u_time * 0.1);
173 |
174 | vec3 ro = vec3( camX, camY, camZ);
175 | vec3 ta = vec3(0.0);
176 | mat3 cameraMatrix = setCamMatrix(ro, ta, 0.0);
177 |
178 | float lensLength = 2.;
179 | vec3 rd = normalize(cameraMatrix * vec3(p.xy, lensLength));
180 |
181 | vec3 color = render(ro, rd, p);
182 | gl_FragColor = vec4(color, 1.0);
183 | }
--------------------------------------------------------------------------------
/blackbox/black_box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/blackbox/black_box.png
--------------------------------------------------------------------------------
/blackbox/blackbox.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "black_box";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/blocks_color_bright/blocks_bright.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: blocks color blright
3 |
4 | #define PROCESSING_COLOR_SHADER
5 | #ifdef GL_ES
6 | precision mediump float;
7 | #endif
8 | #define PI 3.14159265359
9 |
10 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
11 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
12 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
13 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
14 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
15 |
16 | uniform vec2 u_resolution;
17 | uniform vec2 u_mouse;
18 | uniform float u_time;
19 |
20 | // Created by inigo quilez - iq/2013
21 | // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
22 | // http://iquilezles.org/www/articles/voronoise/voronoise.htm
23 | vec3 hash3( vec2 p ) {
24 | vec3 q = vec3( dot(p,vec2(127.1,311.7)),
25 | dot(p,vec2(269.5,183.3)),
26 | dot(p,vec2(419.2,371.9)) );
27 | return fract(sin(q)*43758.5453);
28 | }
29 |
30 | float iqnoise( in vec2 x, float u, float v, float s ) {
31 | vec2 p = floor(x);
32 | vec2 f = fract(x);
33 |
34 | float k = 1.0+63.0*pow(1.0-v,4.0);
35 |
36 | float va = 0.0;
37 | float wt = 0.0;
38 | vec4 ret;
39 | for ( float j=-2.; j<=2.; j+=1.) {
40 | for (float i=-2.; i<=2.; i+=1.) {
41 |
42 | vec2 g = vec2(i,j);
43 | vec3 o = hash3(p + g)*vec3(u,u,1.0);
44 | vec2 r = g - f + o.xy;
45 |
46 | float d = dot(r,r);
47 | float ww = pow( 1.0-smoothstep(0.0,s,sqrt(d)), k );
48 | va += o.z*ww;
49 | wt += ww;
50 | }
51 | }
52 | return va/wt;
53 | }
54 | float iqnoise( in vec2 x, in float v )
55 | {
56 | return iqnoise( x, .5, .5, 1.);
57 | }
58 | float iqnoise( in vec2 x )
59 | {
60 | return iqnoise( x, 1. );
61 | }
62 |
63 |
64 | void main() {
65 |
66 | vec2 st = 2. * gl_FragCoord.xy/u_resolution.xy - 1.;
67 | st.x *= u_resolution.x/u_resolution.y;
68 | vec2 uv = st;
69 | st += vec2(.0);
70 |
71 | vec3 color = orange;
72 | vec3 colors[4];
73 | colors[0] = pink;
74 | colors[1] = orange;
75 | colors[2] = yellow_bright;
76 | colors[3] = blue;
77 |
78 | float dir = 1.;
79 | float ot = ( .5 * sin( u_time ) +.5 );
80 | float mt = ( .5 * sin( u_time * 1.1 ) +.5 )*2.;
81 | float mc = ( .5 * sin( u_time * 0.2 ) +.5 );
82 | vec3 final = mix( mix( blue, pink, mc )*.8, mix( pink, orange, mc ), st.y );// * ( .15 + ot * .05 );
83 | const float total = 10.;
84 | for( float i = 1.; i < total; i+= 1. ){
85 |
86 | const float count = 4.;
87 | float acc = 0.;
88 |
89 | float a = .1 * u_time + i * PI / 180. * ( i * 20. );
90 | float inv = .25 + ( ( count - i ) * .1 + sin( u_time * i * .01 ));
91 | vec2 p = vec2( 2.*cos( a )*inv, sin( a ) * inv );
92 |
93 | for( float j = 1.; j < count; j += 1. ){
94 |
95 | float l = 1.- length( st-p);
96 |
97 | float v = pow( smoothstep( .0,1., l ) * .75, 2. );
98 |
99 | v *= pow( iqnoise( ( uv * i * 0.5 ), mt * .5 ), 1. );
100 | acc += v;
101 |
102 | }
103 | final = mix( final, colors[ int( mod( i, 4. ) ) ], acc );
104 |
105 | }
106 |
107 | gl_FragColor = vec4( final,1.0);
108 |
109 | }
--------------------------------------------------------------------------------
/blocks_color_bright/blocks_bright.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/blocks_color_bright/blocks_bright.png
--------------------------------------------------------------------------------
/blocks_color_bright/blocks_color_bright.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "blocks_bright";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/blocks_color_dark/blocks_color_dark.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "blocks_dark";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/blocks_color_dark/blocks_dark.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: blocks color dark
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159265359
9 |
10 | #define PROCESSING_COLOR_SHADER
11 |
12 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
13 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
14 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
15 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
16 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
17 |
18 | uniform vec2 u_resolution;
19 | uniform vec2 u_mouse;
20 | uniform float u_time;
21 |
22 | float random (in vec2 st) {
23 | return fract(sin(dot(st.xy,vec2(12.9898,78.233))) * 43758.5453123);
24 | }
25 | void main() {
26 |
27 | vec2 st = 2. * gl_FragCoord.xy/u_resolution.xy - 1.;
28 | st.x *= u_resolution.x/u_resolution.y;
29 | vec2 uv = st;
30 | st += vec2(.0);
31 | vec3 color = vec3(1.);
32 | color = vec3(st.x,st.y,abs(sin(u_time)));
33 | color = orange;
34 |
35 | vec3 colors[4];
36 | colors[0] = pink;
37 | colors[1] = orange;
38 | colors[2] = yellow_bright;
39 | colors[3] = blue;
40 |
41 | float ot = ( .5 * sin( u_time ) +.5 );
42 | float mt = ( .5 * sin( u_time * 0.1 ) +.5 )*2.;
43 | float mc = ( .5 * sin( u_time * 0.2 ) +.5 );
44 | vec3 final = blue * ( .15 + ot * .05 );
45 | const float total = 10.;
46 | for( float i = 1.; i < total; i+= 1. ){
47 |
48 | const float count = 5.;
49 | float acc = 0.;
50 | for( float j = 1.; j < count; j += 1. ){
51 |
52 | float a = .1 * u_time + i * PI / 180. * ( j * 40. + i * 20. );
53 |
54 | float inv = .25 + abs( ( count - i ) * .1 + sin( u_time * i * .01 ));
55 |
56 | vec2 p = vec2( 2.*cos( a )*inv, sin( a ) * inv );
57 |
58 | float l = 1.- length( st-p);
59 |
60 | float v = pow( smoothstep( .0,1., l ) * 0.85, 4. );
61 |
62 | v *= pow( random( floor( uv * (mt+j*1.5) + p ) ), 2.+mt*3. ) + smoothstep( .99,1.0, l );
63 | acc += v;
64 |
65 | }
66 | final = mix( final, colors[ int( mod( i, 4. ) ) ], acc );
67 |
68 | }
69 |
70 | gl_FragColor = vec4( final,1.0);
71 |
72 | }
--------------------------------------------------------------------------------
/blocks_color_dark/blocks_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/blocks_color_dark/blocks_dark.png
--------------------------------------------------------------------------------
/chladni/chladni.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: Chladni patterns
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 | #define PROCESSING_COLOR_SHADER
8 |
9 | vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
10 | vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
11 | vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
12 | vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
13 | vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
14 |
15 |
16 | #define PI 3.1415926535897932384626433832795
17 | const float GR = 1.61803399;
18 |
19 | uniform vec2 u_resolution;
20 | uniform vec2 u_mouse;
21 | uniform float u_time;
22 |
23 |
24 | void main() {
25 |
26 | vec3 colors[5];
27 | colors[0] = blue;
28 | colors[1] = yellow_bright;
29 | colors[2] = yellow_dark;
30 | colors[3] = orange;
31 | colors[4] = pink;
32 |
33 | vec2 st = ( 2. * gl_FragCoord.xy - u_resolution ) / max( u_resolution.x, u_resolution.y ) ;
34 | float iteration = 20. + smoothstep( -1., 1., sin( PI * 2. * ( u_time * 0.1 ) ) ) * 20.;
35 |
36 | float an = u_time * PI * 2. * .1;
37 | st += vec2( cos( an / GR ), sin( an * GR ) );
38 |
39 | float sqi = ( abs(sin( u_time * 0.1 * PI * 2. ) ) );
40 | float a = sqi * sin( u_time * 0.01 );
41 | float b = sqi * cos( u_time * 0.005 );
42 |
43 | vec2 t = vec2( cos( an ) * .25, sin( an ) * .25 );
44 | for( float i = 1.; i < 4.; i+= 1. ){
45 |
46 | mat2 m = mat2( cos( a * i * PI * st.x ),
47 | cos( b * i * PI * st.y ),
48 | -cos( b * i * PI * st.x ),
49 | cos( a * i * PI * st.y ) );
50 | st += t * m * i;
51 | }
52 |
53 | float len = length( st );
54 |
55 | vec3 color = mix( blue, yellow_bright, smoothstep( 0.5, 0.51, len ) );
56 | color = mix( color, yellow_dark, smoothstep( 0.75, 0.76, len ) );
57 | color = mix( color, orange, smoothstep( 1.5, 1.51, len ) );
58 | color = mix( color, pink, smoothstep( 1.75, 1.751, len ) );
59 | gl_FragColor = vec4(color,1.0);
60 |
61 | }
--------------------------------------------------------------------------------
/chladni/chladni.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "chladni";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/chladni/chladni.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/chladni/chladni.png
--------------------------------------------------------------------------------
/gooey/gooey.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: gooey
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159
9 |
10 | #define PROCESSING_COLOR_SHADER
11 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
12 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
13 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
14 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
15 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
16 |
17 | uniform vec2 u_resolution;
18 | uniform float u_time;
19 |
20 | // Created by inigo quilez - iq/2013
21 | // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
22 | // http://iquilezles.org/www/articles/voronoise/voronoise.htm
23 | vec3 hash3( vec2 p ) {
24 | vec3 q = vec3( dot(p,vec2(127.1,311.7)),
25 | dot(p,vec2(269.5,183.3)),
26 | dot(p,vec2(419.2,371.9)) );
27 | return fract(sin(q)*43758.5453);
28 | }
29 |
30 | float iqnoise( in vec2 x, float u, float v, float s ) {
31 | vec2 p = floor(x);
32 | vec2 f = fract(x);
33 |
34 | float k = 1.0+63.0*pow(1.0-v,4.0);
35 |
36 | float va = 0.0;
37 | float wt = 0.0;
38 | vec4 ret;
39 | for ( float j=-2.; j<=2.; j+=1.) {
40 | for (float i=-2.; i<=2.; i+=1.) {
41 |
42 | vec2 g = vec2(i,j);
43 | vec3 o = hash3(p + g)*vec3(u,u,1.0);
44 | vec2 r = g - f + o.xy;
45 |
46 | float d = dot(r,r);
47 | float ww = pow( 1.0-smoothstep(0.0,s,sqrt(d)), k );
48 | va += o.z*ww;
49 | wt += ww;
50 | }
51 | }
52 | return va/wt;
53 | }
54 | void main(){
55 |
56 | vec2 st = gl_FragCoord.xy/u_resolution.xy;
57 | st.x *= u_resolution.x/u_resolution.y;
58 |
59 | float time = u_time;
60 | float si = sin( time * .1 );
61 | float co = cos( time * .1 );
62 | float n = iqnoise( ( st - vec2( 0., time*.1 ) ) * 3.5, 0.5, 0., 10.1 );
63 |
64 | vec2 vt = ( st - vec2( 0., time*.1 ) ) + n * ( co+si );
65 | float v0 = pow( iqnoise( vt * 3., 1., si, max( 0., 0.5 + si * .5 ) ), 3. );
66 | float v1 = pow( iqnoise( vt * 6., co, min( 1., co*si ),1.1 ), 3. );
67 |
68 | vec3 c = mix( mix( orange, yellow_bright, v0 ) * 1.2, mix( pink, blue, v1 ), clamp( max( v0, v1 ), 0.,1. ) * 1. );
69 | gl_FragColor = vec4( c,1. );
70 |
71 | }
--------------------------------------------------------------------------------
/gooey/gooey.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "gooey";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/gooey/gooey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/gooey/gooey.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
44 |
45 |
46 |
47 |
48 |
BUMP visuals
49 |
50 |
51 |
52 |
the following is my contribution to a gig performed by
No computer.
53 | it's a series of 2D shaders that will potentially be displayed on a big screen during the
Bump festival in Kortrijk on the 24th of june 2016.
54 |
it is mostly hacked from the following shaders:https://www.shadertoy.com/view/MlXGDf, https://www.shadertoy.com/view/Xds3zN & http://thebookofshaders.com/
55 |
56 |
the basic setup is a
Processing 3 sketch with the following code:
57 |
58 | PShader shader;
59 | String name = "shader_name";
60 |
61 | void setup() {
62 | size( 1200, 500, P3D );
63 | noStroke();
64 | shader = loadShader( name + ".glsl");
65 | }
66 |
67 | void draw() {
68 |
69 | shader.set("u_resolution", float(width), float(height));
70 | shader.set("u_time", millis() / 1000.0);
71 |
72 | shader(shader);
73 | rect(0,0,width,height);
74 |
75 | }
76 |
77 | void keyPressed(){
78 | shader = loadShader( name + ".glsl");
79 | saveFrame( name + ".png" );
80 | }
81 |
82 |
pressing any key will reload the shader an take a snapshot.
83 |
click on the image link to watch a live version.
84 |
you can copy paste any of the following snippets (click editor to open the code) in the above Processing template
85 |
86 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
--------------------------------------------------------------------------------
/klimt/klimt.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: klimt
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159265359
9 |
10 | #define PROCESSING_COLOR_SHADER
11 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
12 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
13 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
14 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
15 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
16 |
17 | uniform vec2 u_resolution;
18 | uniform vec2 u_mouse;
19 | uniform float u_time;
20 |
21 | const float MAX_TRACE_DIST = 50.0;
22 | const float MIN_HIT_DIST = 0.001;
23 | const int MAX_NUM_STEPS = 100;
24 |
25 | float hash( float n ) { return fract(sin(n)*753.5453123); }
26 | float noise( in vec3 x )
27 | {
28 | vec3 p = floor(x);
29 | vec3 f = fract(x);
30 | f = f*f*(3.0-2.0*f);
31 |
32 | float n = p.x + p.y*157.0 + 113.0*p.z;
33 | return mix(mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),
34 | mix( hash(n+157.0), hash(n+158.0),f.x),f.y),
35 | mix(mix( hash(n+113.0), hash(n+114.0),f.x),
36 | mix( hash(n+270.0), hash(n+271.0),f.x),f.y),f.z);
37 | }
38 |
39 | vec2 opU( vec2 a, vec2 b ) { return (a.x < b.x) ? a : b; }
40 | float sdPlane(in vec3 p) { return p.y; }
41 | float sdSphere(in vec3 p, float s){
42 | float d1 = length(p) - s;
43 | return d1;
44 | }
45 |
46 | vec3 mod289(vec3 x) {
47 | return x - floor(x * (1.0 / 289.0)) * 289.0;
48 | }
49 |
50 | vec2 mod289(vec2 x) {
51 | return x - floor(x * (1.0 / 289.0)) * 289.0;
52 | }
53 |
54 | vec3 permute(vec3 x) {
55 | return mod289(((x*34.0)+1.0)*x);
56 | }
57 |
58 | float snoise(vec2 v){
59 | const vec4 C = vec4(0.211324865405187,
60 | 0.366025403784439,
61 | -0.577350269189626,
62 | 0.024390243902439);
63 | vec2 i = floor(v + dot(v, C.yy) );
64 | vec2 x0 = v - i + dot(i, C.xx);
65 | vec2 i1;
66 | i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
67 | vec4 x12 = x0.xyxy + C.xxzz;
68 | x12.xy -= i1;
69 | i = mod289(i);
70 | vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))
71 | + i.x + vec3(0.0, i1.x, 1.0 ));
72 | vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
73 | m = m*m ;
74 | m = m*m ;
75 | vec3 x = 2.0 * fract(p * C.www) - 1.0;
76 | vec3 h = abs(x) - 0.5;
77 | vec3 ox = floor(x + 0.5);
78 | vec3 a0 = x - ox;
79 | m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
80 | vec3 g;
81 | g.x = a0.x * x0.x + h.x * x0.y;
82 | g.yz = a0.yz * x12.xz + h.yz * x12.yw;
83 | return 130.0 * dot(m, g);
84 | }
85 |
86 | float getColor( in vec2 uv )
87 | {
88 | float m = 4.5;
89 | float t = u_time * .01;
90 | float noise = snoise( vec2( m * uv.x + t, m * uv.y - t ));
91 | noise += snoise( uv);
92 | return noise * 12.;
93 | }
94 |
95 | vec2 map(in vec3 pos, in vec2 uv){
96 |
97 | vec2 res = vec2( sdPlane(pos - vec3(0.0, -2.0, 0.0)), 1.0 );
98 | res = opU( res, vec2(sdSphere(pos-vec3( 2.5,0.,0.), 1.5+ sin( u_time*.1)*.25),2.) );
99 |
100 | float freq = getColor( uv );
101 | float d1 = 0.1*sin(freq * pos.x) * sin(freq * pos.y + 0.8) * sin(freq * pos.z + 0.3);
102 | float d2 = 0.1*sin(freq * pos.x) * sin(freq * pos.y + 0.8) * sin(freq * pos.z + 0.3);
103 | return vec2( res.x - d2, 1. );
104 | }
105 |
106 | float softshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax ){
107 | float res = 1.0;
108 | float t = mint;
109 | for(int i = 0; i < 16; ++i)
110 | {
111 | float h = map(ro + rd * t, vec2(1.)).x;
112 | res = min(res, 8.0 * h / t);
113 | t += clamp(h, 0.02, 0.10);
114 | if(h < 0.001 || t > tmax) break;
115 | }
116 | return clamp( res, 0.0, 1.0 );
117 | }
118 |
119 | vec3 calcNormal(in vec3 pos, in vec2 uv ){
120 | vec3 eps = vec3(0.001, 0.0, 0.0);
121 | vec3 nor = vec3(
122 | map(pos+eps.xyy, uv).x - map(pos-eps.xyy, uv).x,
123 | map(pos+eps.yxy, uv).x - map(pos-eps.yxy, uv).x,
124 | map(pos+eps.yyx, uv).x - map(pos-eps.yyx, uv).x);
125 | return normalize(nor);
126 | }
127 |
128 | vec2 calcIntersection(in vec3 ro, in vec3 rd, in vec2 uv ){
129 | float h = MIN_HIT_DIST * 2.0;
130 | float t = 0.0;
131 | float finalDist = -1.0;
132 | float id = -1.0;
133 | for(int i = 0; i < MAX_NUM_STEPS; ++i){
134 | if(h < MIN_HIT_DIST || t > MAX_TRACE_DIST) break;
135 |
136 | vec2 distToClosest = map(ro + rd * t, uv);
137 | h = distToClosest.x;
138 | id = distToClosest.y;
139 | t += h;
140 | }
141 |
142 | if(t < MAX_TRACE_DIST) finalDist = t;
143 | if(t > MAX_TRACE_DIST) id = -1.0;
144 | return vec2(finalDist, id);
145 | }
146 |
147 | vec3 render(in vec3 ro, in vec3 rd, in vec2 uv) {
148 |
149 | float ssDistToCenter = length(uv);
150 | vec3 bgColor1 = vec3(0.6, 0.2, 0.9);
151 | vec3 bgColor2 = vec3(0.0, 0.2, 0.8);
152 | vec3 surfaceColor = vec3(1.);
153 |
154 | vec2 results = calcIntersection(ro, rd, uv);
155 | float t = results.x;
156 | float id = results.y;
157 |
158 | vec3 lightPos = vec3(0.0,10.000,0.0);
159 | vec3 pos = ro + rd * t;
160 | vec3 n = calcNormal(pos, uv);
161 | vec3 diffColor = orange;
162 | n += noise( n + getColor( uv ) );
163 | vec3 l = normalize(lightPos - pos);
164 | float diffStrength = max( pow( dot(n, l), 2. ), 0.0 );
165 | float ambientStrength = clamp(0.5 + .5 * n.y, 0.0, 1.0);
166 | vec3 ambientColor = vec3( 0. );
167 | surfaceColor = diffStrength * diffColor + ambientColor;
168 |
169 | return surfaceColor;
170 | }
171 |
172 | mat3 setCamMatrix(in vec3 ro, in vec3 ta, float roll)
173 | {
174 | vec3 ww = normalize(ta - ro);
175 | vec3 uu = normalize(cross(ww, vec3(sin(roll), cos(roll), 0.0)));
176 | vec3 vv = normalize(cross(uu, ww));
177 | return mat3(uu, vv, ww);
178 | }
179 |
180 | void main()
181 | {
182 |
183 | vec2 p = (-u_resolution.xy + 2.0 * gl_FragCoord.xy) / u_resolution.y;
184 |
185 | float radius = 5.0;
186 | float camX = 7.;
187 | float camZ = 0.;
188 |
189 | vec3 ro = vec3( camX, 00.0, camZ);
190 | vec3 ta = vec3(0.0);
191 | mat3 cameraMatrix = setCamMatrix(ro, ta, 0.0);
192 |
193 | float lensLength = 2.0;
194 | vec3 rd = normalize(cameraMatrix * vec3(p.xy, lensLength));
195 |
196 | vec3 color = render(ro, rd, p);
197 | gl_FragColor = vec4(color, 1.0);
198 | }
--------------------------------------------------------------------------------
/klimt/klimt.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "klimt";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/klimt/klimt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/klimt/klimt.png
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/logo.png
--------------------------------------------------------------------------------
/monolith/monolith.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: monolith
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159265359
9 |
10 | #define PROCESSING_COLOR_SHADER
11 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
12 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
13 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
14 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
15 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
16 |
17 | uniform vec2 u_resolution;
18 | uniform vec2 u_mouse;
19 | uniform float u_time;
20 |
21 |
22 | const float MAX_TRACE_DIST = 50.0;
23 | const float MIN_HIT_DIST = 0.001;
24 | const int MAX_NUM_STEPS = 100;
25 |
26 | float hash( float n ) { return fract(sin(n)*753.5453123); }
27 | float noise( in vec3 x )
28 | {
29 | vec3 p = floor(x);
30 | vec3 f = fract(x);
31 | f = f*f*(3.0-2.0*f);
32 |
33 | float n = p.x + p.y*157.0 + 113.0*p.z;
34 | return mix(mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),
35 | mix( hash(n+157.0), hash(n+158.0),f.x),f.y),
36 | mix(mix( hash(n+113.0), hash(n+114.0),f.x),
37 | mix( hash(n+270.0), hash(n+271.0),f.x),f.y),f.z);
38 | }
39 | float roundBox( vec3 p, vec3 b, float r ){ return length(max(abs(p)-b,0.0))-r; }
40 |
41 |
42 | vec3 mod289(vec3 x) {
43 | return x - floor(x * (1.0 / 289.0)) * 289.0;
44 | }
45 |
46 | vec2 mod289(vec2 x) {
47 | return x - floor(x * (1.0 / 289.0)) * 289.0;
48 | }
49 |
50 | vec3 permute(vec3 x) {
51 | return mod289(((x*34.0)+1.0)*x);
52 | }
53 |
54 | float snoise(vec2 v){
55 | const vec4 C = vec4(0.211324865405187,
56 | 0.366025403784439,
57 | -0.577350269189626,
58 | 0.024390243902439);
59 | vec2 i = floor(v + dot(v, C.yy) );
60 | vec2 x0 = v - i + dot(i, C.xx);
61 | vec2 i1;
62 | i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
63 | vec4 x12 = x0.xyxy + C.xxzz;
64 | x12.xy -= i1;
65 | i = mod289(i);
66 | vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))
67 | + i.x + vec3(0.0, i1.x, 1.0 ));
68 | vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
69 | m = m*m ;
70 | m = m*m ;
71 | vec3 x = 2.0 * fract(p * C.www) - 1.0;
72 | vec3 h = abs(x) - 0.5;
73 | vec3 ox = floor(x + 0.5);
74 | vec3 a0 = x - ox;
75 | m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
76 | vec3 g;
77 | g.x = a0.x * x0.x + h.x * x0.y;
78 | g.yz = a0.yz * x12.xz + h.yz * x12.yw;
79 | return 130.0 * dot(m, g);
80 | }
81 |
82 | float getColor( in vec2 uv )
83 | {
84 | float m = 4.5;
85 | float t = u_time * .1;
86 | float noise = snoise( vec2( m*uv.x, m * uv.y -t ));
87 | noise += abs(snoise( uv));
88 | return noise * 12.;
89 | }
90 | mat3 rotationMatrix(vec3 axis, float angle)
91 | {
92 | axis = normalize(axis);
93 | float s = sin(angle);
94 | float c = cos(angle);
95 | float oc = 1.0 - c;
96 | return mat3(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s,
97 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,
98 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c );
99 | }
100 |
101 | vec2 map(in vec3 pos, in vec2 uv){
102 |
103 |
104 | float box = roundBox( pos+vec3(0.,.75,0. ), vec3( .5, 1.5,.5), .1500);
105 | float freq = getColor( uv );
106 | float n = 0.05 * sin(freq * pos.x ) * sin(freq * pos.y) * sin(freq * pos.z);
107 | return vec2( box - n, 1. );
108 | }
109 |
110 | float softshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax, in vec2 uv ){
111 | float res = 1.0;
112 | float t = mint;
113 | for(int i = 0; i < 16; ++i)
114 | {
115 | float h = map(ro + rd * t, uv).x;
116 | res = min(res, 8.0 * h / t);
117 | t += clamp(h, 0.02, 0.10);
118 | if(h < 0.001 || t > tmax) break;
119 | }
120 | return clamp( res, 0.0, 1.0 );
121 |
122 | }
123 |
124 |
125 | vec3 calcNormal(in vec3 pos, in vec2 uv )
126 | {
127 | vec3 eps = vec3(0.001, 0.0, 0.0);
128 | vec3 nor = vec3(
129 | map(pos+eps.xyy, uv).x - map(pos-eps.xyy, uv).x,
130 | map(pos+eps.yxy, uv).x - map(pos-eps.yxy, uv).x,
131 | map(pos+eps.yyx, uv).x - map(pos-eps.yyx, uv).x);
132 | return normalize(nor);
133 | }
134 |
135 |
136 | float calcIntersection(in vec3 ro, in vec3 rd, in vec2 uv ){
137 |
138 | float h = MIN_HIT_DIST * 2.0;
139 | float t = 0.0;
140 | float finalDist = -1.0;
141 |
142 | for(int i = 0; i < MAX_NUM_STEPS; ++i){
143 | if(h < MIN_HIT_DIST || t > MAX_TRACE_DIST) break;
144 |
145 | vec2 distToClosest = map(ro + rd * t, uv);
146 | h = distToClosest.x;
147 | t += h;
148 | }
149 |
150 | if(t < MAX_TRACE_DIST) finalDist = t;
151 | return finalDist;
152 | }
153 |
154 |
155 |
156 | vec3 render(in vec3 ro, in vec3 rd, in vec2 uv)
157 | {
158 |
159 | float ssDistToCenter = length(uv);
160 | vec3 bgColor1 = vec3(0.6, 0.2, 0.9);
161 | vec3 bgColor2 = vec3(0.0, 0.2, 0.8);
162 | vec3 surfaceColor = .25*mix( .1*blue, orange*2., ( uv.y+.5 ) * getColor(uv*0.1)*.05 * noise( vec3( getColor( fract( uv *10.15 )*u_time*.1 ) ) ) );
163 |
164 | float results = calcIntersection(ro, rd, uv);
165 | float t = results;
166 |
167 | vec3 lightPos = ( vec3( 0., .35 + sin( u_time * .1 ) * 0.500,0.0) );
168 | if( t > -.5 ){
169 |
170 |
171 | vec3 pos = ro + rd * t;
172 | vec3 n = calcNormal(pos, uv);
173 | vec3 r = reflect(pos, n );
174 | vec3 diffColor = orange * 1.5;
175 |
176 | r *= rotationMatrix( vec3( uv.x,uv.y,uv.x), u_time *.1* PI * 2. );
177 | n += noise( vec3( getColor( fract( uv * 0.3 )*u_time*.1 ) ) );
178 |
179 | vec3 l = normalize(pos-lightPos );
180 | float diffStrength = max( pow( dot( r, l), 2. ), 0.0 ) * max( pow( dot( n, l), 1. ), 0.0 );
181 | float ambientStrength = clamp(0.05 + .5 * n.y, 0.0, 1.0);
182 | vec3 ambientColor = blue*.2;
183 |
184 | diffColor *= softshadow( pos, lightPos, 0.02, 12.5, uv );
185 | ambientColor *= ambientStrength*.9;
186 |
187 | surfaceColor = ( diffStrength * diffColor + ambientColor );
188 | }
189 |
190 | return surfaceColor;
191 | }
192 |
193 | mat3 setCamMatrix(in vec3 ro, in vec3 ta, float roll)
194 | {
195 | vec3 ww = normalize(ta - ro);
196 | vec3 uu = normalize(cross(ww, vec3(sin(roll), cos(roll), 0.0)));
197 | vec3 vv = normalize(cross(uu, ww));
198 | return mat3(uu, vv, ww);
199 | }
200 |
201 | void main()
202 | {
203 | vec2 p = (-u_resolution.xy + 2.0 * gl_FragCoord.xy) / u_resolution.y;
204 |
205 | float radius = 2.35;
206 | float camX = radius;
207 | float camZ = radius;
208 |
209 | vec3 ro = vec3( camX, -radius, camZ);
210 | vec3 ta = vec3(0.0);
211 | mat3 cameraMatrix = setCamMatrix(ro, ta, 0.0);
212 |
213 | float lensLength = 3.;
214 | vec3 rd = normalize(cameraMatrix * vec3(p.xy, lensLength));
215 |
216 | vec3 color = render(ro, rd, p);
217 | gl_FragColor = vec4(color, 1.0);
218 | }
--------------------------------------------------------------------------------
/monolith/monolith.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "monolith";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/monolith/monolith.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/monolith/monolith.png
--------------------------------------------------------------------------------
/noisy_cone/noisy_cone.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: noisy cone
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159265359
9 |
10 | #define PROCESSING_COLOR_SHADER
11 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
12 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
13 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
14 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
15 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
16 |
17 | uniform vec2 u_resolution;
18 | uniform vec2 u_mouse;
19 | uniform float u_time;
20 |
21 | const float MAX_TRACE_DIST = 10.0;
22 | const float MIN_HIT_DIST = 0.0001;
23 | const int MAX_NUM_STEPS = 200;
24 |
25 | float hash( float n ) { return fract(sin(n)*753.5453123); }
26 | float noise( in vec3 x )
27 | {
28 | vec3 p = floor(x);
29 | vec3 f = fract(x);
30 | f = f*f*(3.0-2.0*f);
31 |
32 | float n = p.x + p.y*157.0 + 113.0*p.z;
33 | return mix(mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x),
34 | mix( hash(n+157.0), hash(n+158.0),f.x),f.y),
35 | mix(mix( hash(n+113.0), hash(n+114.0),f.x),
36 | mix( hash(n+270.0), hash(n+271.0),f.x),f.y),f.z);
37 | }
38 |
39 |
40 | vec2 opU( vec2 a, vec2 b )
41 | {
42 | return (a.x < b.x) ? a : b;
43 | }
44 |
45 | float sdPlane(in vec3 p)
46 | {
47 | return p.y;
48 | }
49 |
50 | float sdSphere(in vec3 p, float s)
51 | {
52 | float d1 = length(p) - s;
53 | return d1;
54 | }
55 | float sdCone( in vec3 p, in vec3 c )
56 | {
57 | vec2 q = vec2( length(p.xz), p.y );
58 | float d1 = -q.y-c.z;
59 | float d2 = max( dot(q,c.xy), q.y);
60 | return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.);
61 | }
62 | vec3 mod289(vec3 x) {
63 | return x - floor(x * (1.0 / 289.0)) * 289.0;
64 | }
65 |
66 | vec2 mod289(vec2 x) {
67 | return x - floor(x * (1.0 / 289.0)) * 289.0;
68 | }
69 |
70 | vec3 permute(vec3 x) {
71 | return mod289(((x*34.0)+1.0)*x);
72 | }
73 |
74 | float snoise(vec2 v){
75 | const vec4 C = vec4(0.211324865405187,
76 | 0.366025403784439,
77 | -0.577350269189626,
78 | 0.024390243902439);
79 | vec2 i = floor(v + dot(v, C.yy) );
80 | vec2 x0 = v - i + dot(i, C.xx);
81 | vec2 i1;
82 | i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
83 | vec4 x12 = x0.xyxy + C.xxzz;
84 | x12.xy -= i1;
85 | i = mod289(i);
86 | vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))
87 | + i.x + vec3(0.0, i1.x, 1.0 ));
88 | vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
89 | m = m*m ;
90 | m = m*m ;
91 | vec3 x = 2.0 * fract(p * C.www) - 1.0;
92 | vec3 h = abs(x) - 0.5;
93 | vec3 ox = floor(x + 0.5);
94 | vec3 a0 = x - ox;
95 | m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
96 | vec3 g;
97 | g.x = a0.x * x0.x + h.x * x0.y;
98 | g.yz = a0.yz * x12.xz + h.yz * x12.yw;
99 | return 130.0 * dot(m, g);
100 | }
101 |
102 | float getColor( in vec2 uv )
103 | {
104 | float m = 4.5;
105 | float t = u_time * .1;
106 | float noise = snoise( vec2( m*uv.x, m * uv.y -t ));
107 | noise += abs(snoise( uv));
108 | return noise * 12.;
109 | }
110 |
111 | mat3 rotationMatrix(vec3 axis, float angle)
112 | {
113 | axis = normalize(axis);
114 | float s = sin(angle);
115 | float c = cos(angle);
116 | float oc = 1.0 - c;
117 |
118 | return mat3(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s,
119 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,
120 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c );
121 | }
122 | vec2 map(in vec3 pos, in vec2 uv)
123 | {
124 | pos *= rotationMatrix( vec3(0.,0., 1. ), PI );
125 | float sphere1 = sdCone( pos - vec3( 0.,2.,0. ), vec3( 0.5,0.3,3.) ) ;
126 | float freq = getColor( uv );
127 | float d1 = 0.1*sin(freq * pos.x) * sin(freq * pos.y + 0.8) * sin(freq * pos.z + 0.3);
128 | float d2 = 0.1*sin(freq * pos.x) * sin(freq * pos.y + 0.8) * sin(freq * pos.z + 0.3);
129 | return vec2( sphere1 - d2, 1. );
130 | }
131 |
132 | float softshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax, in vec2 uv )
133 | {
134 | float res = 1.0;
135 | float t = mint;
136 | for(int i = 0; i < 16; ++i)
137 | {
138 | float h = map(ro + rd * t, uv).x;
139 | res = min(res, 8.0 * h / t);
140 | t += clamp(h, 0.02, 0.10);
141 | if(h < 0.001 || t > tmax) break;
142 | }
143 | return clamp( res, 0.0, 1.0 );
144 | }
145 |
146 |
147 | vec3 calcNormal(in vec3 pos, in vec2 uv )
148 | {
149 | vec3 eps = vec3(0.001, 0.0, 0.0);
150 | vec3 nor = vec3(
151 | map(pos+eps.xyy, uv).x - map(pos-eps.xyy, uv).x,
152 | map(pos+eps.yxy, uv).x - map(pos-eps.yxy, uv).x,
153 | map(pos+eps.yyx, uv).x - map(pos-eps.yyx, uv).x);
154 | return normalize(nor);
155 | }
156 |
157 |
158 | vec2 calcIntersection(in vec3 ro, in vec3 rd, in vec2 uv )
159 | {
160 | float h = MIN_HIT_DIST * 2.0;
161 | float t = 0.0;
162 | float finalDist = -1.0;
163 | float id = -1.0;
164 |
165 | for(int i = 0; i < MAX_NUM_STEPS; ++i){
166 | if(h < MIN_HIT_DIST || t > MAX_TRACE_DIST) break;
167 | vec2 distToClosest = map(ro + rd * t, uv);
168 | h = distToClosest.x;
169 | id = distToClosest.y;
170 | t += h;
171 | }
172 |
173 | if(t < MAX_TRACE_DIST) finalDist = t;
174 |
175 | return vec2(finalDist, id);
176 | }
177 | vec3 render(in vec3 ro, in vec3 rd, in vec2 uv)
178 | {
179 |
180 | float ssDistToCenter = length(uv);
181 | vec3 bgColor1 = vec3(0.6, 0.2, 0.9);
182 | vec3 bgColor2 = vec3(0.0, 0.2, 0.8);
183 | vec3 surfaceColor = .25*mix( .2*blue, orange, rd.y*3.9);
184 |
185 | vec2 results = calcIntersection(ro, rd, uv);
186 | float t = results.x;
187 | float id = results.y;
188 |
189 | if( t > -.50 ){
190 |
191 | vec3 lightPos = normalize( vec3( 3.-abs( cos( u_time * 1.1 )), -0.000, - .5) );
192 |
193 | vec3 pos = ro + rd * t;
194 |
195 | vec3 n = calcNormal(pos, uv);
196 | vec3 r = reflect( rd, n );
197 | vec3 diffColor = orange;
198 | vec3 l = normalize(pos-lightPos );
199 |
200 | float diffStrength = max( pow( dot(r, l), 2.5 ), 0.0 ) * .5 + max( pow( dot(n, l), 1. ), 0.0 ) * .5;
201 | float ambientStrength = clamp(0.05 + .5 * n.y, 0.0, 1.0);
202 | vec3 ambientColor = blue;
203 |
204 | ambientColor *= ambientStrength*.5;
205 |
206 | surfaceColor = ( diffStrength * diffColor + ambientColor );
207 | }
208 |
209 | return surfaceColor;
210 | }
211 |
212 | mat3 setCamMatrix(in vec3 ro, in vec3 ta, float roll)
213 | {
214 | vec3 ww = normalize(ta - ro);
215 | vec3 uu = normalize(cross(ww, vec3(sin(roll), cos(roll), 0.0)));
216 | vec3 vv = normalize(cross(uu, ww));
217 | return mat3(uu, vv, ww);
218 | }
219 |
220 | void main()
221 | {
222 |
223 | vec2 p = (-u_resolution.xy + 2.0 * gl_FragCoord.xy) / u_resolution.y;
224 |
225 | float radius = 5.0;
226 | float camX = 5.;
227 | float camZ = 0.;
228 |
229 | vec3 ro = vec3( camX, 0., camZ);
230 | vec3 ta = vec3(0.0);
231 | mat3 cameraMatrix = setCamMatrix(ro, ta, 0.0);
232 |
233 | float lensLength = 2.0;
234 | vec3 rd = normalize(cameraMatrix * vec3(p.xy, lensLength));
235 |
236 | vec3 color = render(ro, rd, p);
237 | gl_FragColor = vec4(color, 1.0);
238 | }
--------------------------------------------------------------------------------
/noisy_cone/noisy_cone.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "noisy_cone";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/noisy_cone/noisy_cone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/noisy_cone/noisy_cone.png
--------------------------------------------------------------------------------
/panopitcon/panopitcon.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: panopitcon ( dark future )
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159
9 |
10 | #define PROCESSING_COLOR_SHADER
11 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
12 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
13 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
14 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
15 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
16 |
17 | uniform vec2 u_resolution;
18 | uniform vec2 u_mouse;
19 | uniform float u_time;
20 |
21 |
22 | float rand(float n){
23 | return fract( ( sin( n ) * 43758.5453123 ) );
24 | }
25 | float noise(float p)
26 | {
27 | float fl = floor(p);
28 | float fc = fract(p);
29 | return mix(rand(fl), rand(fl + 1.0), fc);
30 | }
31 |
32 | float f( vec2 p, float a, float b){
33 | return ( atan(p.y+a,p.x+b) );
34 | }
35 |
36 | void main() {
37 |
38 | float scale = 10.;
39 | vec2 sc = 2. * ( gl_FragCoord.xy / u_resolution );
40 | vec2 st = sc * u_resolution.xy / max(u_resolution.x, u_resolution.y);
41 | st *= 6.;
42 | vec2 uv = 1. + sc * u_resolution.xy / max(u_resolution.x, u_resolution.y);
43 | uv *= scale;
44 |
45 | float t = ( u_time *.1 ) - 10.;
46 | vec2 id = floor( uv );
47 | vec2 fr = fract( uv);
48 |
49 | float acc = 0.;
50 | for( float i = 1.; i < 20.; i+=1. ){
51 | vec2 id = floor( uv * scale / i ) + t;
52 | vec2 fr = fract( uv * scale / i ) + ( ( t ) - floor( uv.x * t ) );
53 | fr.y += fract( fr.y );
54 | acc += .205 * sin( f( sc * floor( sc ).x + floor( sc ).y, fr.x / cos( id.x ), fr.y / sin( id.y ) ) );
55 | }
56 |
57 | float w = sc.y + ( sin( ( sc.y - t ) * rand( floor(st+t).x ) * 10. ) );
58 | w *= ( cos( ( sc.x - t * sc.y * 50.) * 1. ) );
59 |
60 | float v = acc * pow( length( sc-vec2( 1., 0. ) ), 2. );
61 |
62 | vec3 color = mix( blue * v, orange * v, smoothstep( 0.,1., w ) );
63 |
64 | color *= smoothstep( .65,.751,1.-sin( distance( fract( st ), vec2(0.5) ) ) );
65 |
66 | gl_FragColor = vec4(color,1.0);
67 |
68 | }
--------------------------------------------------------------------------------
/panopitcon/panopitcon.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "panopitcon";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/panopitcon/panopitcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/panopitcon/panopitcon.png
--------------------------------------------------------------------------------
/polygons/polygons.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: polygons
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 | #define PI 3.14159265359
8 | #define PROCESSING_COLOR_SHADER
9 |
10 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
11 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
12 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
13 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
14 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
15 |
16 | uniform vec2 u_resolution;
17 | uniform float u_time;
18 |
19 | float poly( vec2 c, float sides, float scale, float thickness ){
20 |
21 | float a=atan(c.x,c.y);
22 | float b=6.28319/float(sides);
23 | return smoothstep( .5-thickness, .5, cos(floor(.5+a/b)*b-a)*length(c.xy) * ( 1. / scale ) ) - smoothstep( .5, .5 + thickness, cos(floor(.5+a/b)*b-a)*length(c.xy) * ( 1. / scale ) );
24 |
25 | }
26 | float rand( vec2 c ){
27 | return fract(sin(dot(c.xy,vec2(12.9898,78.233)))*43758.5453123);
28 | }
29 |
30 | //#define biunit
31 | void main() {
32 |
33 | vec2 ratio = u_resolution.xy / max(u_resolution.x, u_resolution.y);
34 | #ifdef biunit
35 | vec2 uv = ( 2. * ( gl_FragCoord.xy / u_resolution ) - 1. ) * ratio;
36 | #else
37 | vec2 uv = ( gl_FragCoord.xy / u_resolution ) * ratio;
38 | #endif
39 |
40 | vec3 col = vec3(0.);
41 |
42 | float scale = 1.;
43 | vec2 f = fract( uv );
44 |
45 | float a = u_time * .001 * PI;
46 | float ca = cos( a * 2. );
47 | float sa = sin( a * 1.5 );
48 | mat2 t = mat2( ca, -sa, sa, ca );
49 |
50 | vec2 i = floor( uv * 100. );
51 | vec2 motion = vec2( sa, ca )*100.;
52 |
53 | float acc = 0.;
54 | const float count = 10.;
55 | for( float k = 0.; k < count; k+= 1. ){
56 | acc += rand( floor( t * ( motion + uv * k - vec2( k *.5 ) * ratio ) ) ) * ( k / count ) * .25;
57 | }
58 | col = vec3( acc );
59 |
60 | a = 0.;
61 | ca = cos( a );
62 | sa = sin( a );
63 | t = mat2( ca, -sa, sa, ca );
64 | f -= vec2(0.5) * ratio;
65 | f *= t;
66 |
67 | float s = 0.;
68 | float pscale = 0.;
69 |
70 | a = u_time * 1.1;
71 | ca = cos( a );
72 | sa = sin( a );
73 | s = 6.;
74 | pscale = min( ratio.x, ratio.y ) * .25 ;
75 | col += vec3( poly( f, s, pscale, 0.1 ) + poly( f, s,pscale,.15 ) * ( .25 + sa * .05 ) );
76 | s /= 2.;
77 | col += vec3( poly( f, s, pscale, 0.1 ) + poly( f, s,pscale,.15 ) * ( .25 + sa * .05 ) );
78 | s *= 40.;
79 | col += vec3( poly( f, s, pscale * 2., 0.1 ) + poly( f, s,pscale * 2.,.5 )* ( .5 + sa * .35 ) );
80 | s = 4.;
81 | col += vec3( poly( f, s, pscale * 2., 0.1 ) + poly( f, s,pscale * 1.,.25 ) );// * ( .5 + sa * .75 ) );
82 |
83 | f += vec2(.5);
84 | col *= vec3( f.x, f.y, 1. );
85 | gl_FragColor = vec4( col, 1. );
86 |
87 | }
--------------------------------------------------------------------------------
/polygons/polygons.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "polygons";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/polygons/polygons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/polygons/polygons.png
--------------------------------------------------------------------------------
/vorogrid/vorogrid.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: vorogrid
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PI 3.14159265359
9 |
10 | #define PROCESSING_COLOR_SHADER
11 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
12 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
13 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
14 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
15 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
16 |
17 | uniform vec2 u_resolution;
18 | uniform vec2 u_mouse;
19 | uniform float u_time;
20 |
21 | float sdPlane( vec3 p ) { return p.y; }
22 |
23 | float sdSphere( vec3 p, float s ) { return length(p)-s; }
24 |
25 | float sdBox( vec3 p, vec3 b ) { vec3 d = abs(p) - b; return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0)); }
26 |
27 | float opS( float d1, float d2 ) { return max(-d2,d1); }
28 |
29 | vec2 opU( vec2 d1, vec2 d2 ) { return (d1.x x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
43 | vec4 x12 = x0.xyxy + C.xxzz;
44 | x12.xy -= i1;
45 | i = mod289(i);
46 | vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 )) + i.x + vec3(0.0, i1.x, 1.0 ));
47 | vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
48 | m = m*m ;
49 | m = m*m ;
50 | vec3 x = 2.0 * fract(p * C.www) - 1.0;
51 | vec3 h = abs(x) - 0.5;
52 | vec3 ox = floor(x + 0.5);
53 | vec3 a0 = x - ox;
54 | m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
55 | vec3 g;
56 | g.x = a0.x * x0.x + h.x * x0.y;
57 | g.yz = a0.yz * x12.xz + h.yz * x12.yw;
58 | return 130.0 * dot(m, g);
59 | }
60 |
61 | mat3 rotationMatrix(vec3 axis, float angle)
62 | {
63 | axis = normalize(axis);
64 | float s = sin(angle);
65 | float c = cos(angle);
66 | float oc = 1.0 - c;
67 | return mat3(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s,
68 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,
69 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c );
70 | }
71 | float seed = 0.;
72 | float rand(float n){
73 |
74 | return fract( sin( seed + n * 43758.5453123 ) );
75 | }
76 | vec2 rand2(in vec2 p){
77 | return fract(vec2(sin(p.x * 591.32 + p.y * 154.077), cos(p.x * 391.32 + p.y * 49.077)));
78 | }
79 |
80 | float seednoise(float p)
81 | {
82 | float fl = floor(p);
83 | float fc = fract(p );
84 | return mix(rand( fl + seed ), rand(fl + seed+ 1.0), fc);
85 | }
86 |
87 | float noise(float p)
88 | {
89 | float fl = floor(p);
90 | float fc = fract(p );
91 | return mix(rand( fl ), rand(fl + 1.0), fc);
92 | }
93 |
94 | float cube( in vec3 p, in vec3 b, in float t ) {
95 | return opS( opS( opS( sdBox( p, b ), sdBox( p, vec3(b.x*2., b.y*t, b.z*t) ) ), sdBox( p, vec3(b.x*t, b.y*2., b.z*t) ) ), sdBox( p, vec3(b.x*t, b.y*t, b.z *2. ) ) );
96 | }
97 | float hollowSphere( in vec3 p, in float outerRadius, in float thickness ) {
98 | return opS( sdSphere( p, outerRadius ), sdSphere( p, outerRadius * ( 1. - thickness ) ) );
99 | }
100 |
101 | vec2 map( in vec3 pos ){
102 | vec2 res = vec2( 0.);
103 |
104 | const float count_i = 2., count_j = 2. , count_k = 2.;
105 | float noise_i = 2., noise_j = 2. , noise_k = 2.;
106 | float multi = 1.;
107 | vec3 pfloor = floor( pos * multi );
108 | vec3 pfract = fract( pos * multi );
109 | float dist = 0.;
110 |
111 | seed = abs( snoise( vec2( u_time * .01 ) ) ) * .0001;
112 | pos *= rotationMatrix( vec3( 1.,0.,0. ), u_time * .1 );
113 |
114 | vec3 c = vec3(.0);
115 | vec3 tg = pos;
116 | vec3 origin = tg;
117 | float sq = .75;
118 | res = vec2( sdSphere( pos, .75) , 2.) ;
119 | for( float i = -1.; i < count_i; i += 1. ){
120 |
121 | for( float j = -1.; j < count_j; j += 1. ){
122 |
123 | for( float k = -1.; k < count_k; k += 1. ){
124 | vec3 cell = pos - vec3( i, j, k );
125 | vec3 tg = cell + normalize( vec3( seednoise( i+j ), seednoise( j+k ), seednoise( k+i ) ) )-.5;
126 | dist = distance( pos, tg );
127 | res = vec2( opS( res.x, sdSphere( tg, dist * sq ) ), sqrt( dist ) );
128 | }
129 | }
130 | }
131 | return res;
132 | }
133 |
134 | vec2 castRay( in vec3 ro, in vec3 rd )
135 | {
136 | float tmin = 0.1;
137 | float tmax = 50.0;
138 | float precis = 0.0001;
139 | float t = tmin;
140 | float m = -1.0;
141 | for( int i=0; i<100; i++ )
142 | {
143 | vec2 res = map( ro+rd*t );
144 | if( res.xtmax ) break;
145 | t += res.x;
146 | m = res.y;
147 | }
148 | if( t>tmax ) m=-1.0;
149 | return vec2( t, m );
150 | }
151 |
152 | vec3 calcNormal( in vec3 pos )
153 | {
154 | vec3 eps = vec3( 0.001, 0.0, 0.0 );
155 | vec3 nor = vec3(
156 | map(pos+eps.xyy).x - map(pos-eps.xyy).x,
157 | map(pos+eps.yxy).x - map(pos-eps.yxy).x,
158 | map(pos+eps.yyx).x - map(pos-eps.yyx).x );
159 | return normalize(nor);
160 | }
161 |
162 | vec3 render( in vec3 ro, in vec3 rd, in vec2 uv )
163 | {
164 | float n = snoise( vec2( uv.x * .2 + sin( u_time * 0.01 ), uv.y * .2 + sin(u_time * 0.01) ) );
165 | vec3 col = blue * .35 + rd.y + ( pow( n, 2. ) ) * .8;
166 | vec2 res = castRay(ro,rd);
167 | float t = res.x;
168 | float m = res.y;
169 | if( m>-0.5 )
170 | {
171 | vec3 pos = ro + rd * t;
172 | vec3 n = calcNormal(pos);
173 | vec3 ref = reflect( rd, n );
174 | vec3 diffColor = orange;
175 |
176 | vec3 lightPos = ( vec3( -1., -.700, 3.0) );
177 | vec3 l = normalize(pos-lightPos );
178 | float diffStrength = max( pow( dot(n, l), 32. ), 0.0 );
179 | vec3 ambientColor = blue * clamp( 0.005 + .35 * ref.y, 0.0, 1.0);
180 | col = ( diffStrength * diffColor + ambientColor );
181 |
182 | }
183 | return vec3( clamp(col,0.0,1.0) );
184 | }
185 |
186 | mat3 setCamera( in vec3 ro, in vec3 ta, float cr )
187 | {
188 | vec3 cw = normalize(ta-ro);
189 | vec3 cp = vec3(sin(cr), cos(cr),0.0);
190 | vec3 cu = normalize( cross(cw,cp) );
191 | vec3 cv = normalize( cross(cu,cw) );
192 | return mat3( cu, cv, cw );
193 | }
194 |
195 | void main()
196 | {
197 | vec2 q = gl_FragCoord.xy/u_resolution.xy;
198 | vec2 p = 2.0*q-1.;
199 | p.x *= u_resolution.x/u_resolution.y;
200 |
201 | vec3 ro = vec3( 0.,0.,-2. );
202 | vec3 ta = vec3( 2./3., 0., 0.);
203 | mat3 ca = setCamera( ro, ta, 0.0 );
204 | vec3 rd = ca * normalize( vec3(p.xy, 2.5 ) );
205 | vec3 col = render( ro, rd, q );
206 |
207 | gl_FragColor=vec4( col, 1.0 );
208 | }
--------------------------------------------------------------------------------
/vorogrid/vorogrid.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "vorogrid";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/vorogrid/vorogrid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/vorogrid/vorogrid.png
--------------------------------------------------------------------------------
/waves/waves.glsl:
--------------------------------------------------------------------------------
1 | // Author: Nicolas Barradeau
2 | // Title: waves
3 |
4 | #ifdef GL_ES
5 | precision mediump float;
6 | #endif
7 |
8 | #define PROCESSING_COLOR_SHADER
9 | const vec3 blue = vec3( 0.4453125, 0.890625, 0.890625 );
10 | const vec3 yellow_bright = vec3( 0.9296875, 0.8671875, 0.18359375 );
11 | const vec3 yellow_dark = vec3( 0.921875, 0.80078125, 0.);
12 | const vec3 orange = vec3( 0.88671875, 0.625, 0.1171875);
13 | const vec3 pink = vec3( 0.92578125, 0.46484375, 0.89453125);
14 |
15 |
16 | uniform float u_time;
17 | uniform vec2 u_resolution;
18 | uniform float u_mouse;
19 |
20 | // 1D random numbers
21 | float rand(float n){
22 | return fract( ( sin( n ) * 43758.5453123 ) );
23 | }
24 |
25 | // 2D random numbers
26 | vec2 rand2(in vec2 p){
27 | return fract(vec2(sin(p.x * 591.32 + p.y * 154.077), cos(p.x * 391.32 + p.y * 49.077)));
28 | }
29 |
30 | // 1D noise
31 | float noise(float p)
32 | {
33 | float fl = floor(p);
34 | float fc = fract(p);
35 | return mix(rand(fl), rand(fl + 1.0), fc);
36 | }
37 |
38 |
39 | void main() {
40 |
41 |
42 | float scale = 1.;
43 | vec2 sc = ( gl_FragCoord.xy / u_resolution );
44 | vec2 uv = sc * u_resolution.xy / max(u_resolution.x, u_resolution.y);
45 | uv *= scale;
46 |
47 | float angle = radians( 45 * sc.y + sin( u_time ) );
48 | float ca = cos( angle );
49 | float sa = sin( angle );
50 |
51 | uv *= mat2( ca, sa, -sa, ca );
52 | vec2 i = floor( uv );
53 | vec2 f = fract( uv );
54 |
55 | float v0 = rand( floor( uv * 20. ).x+ u_time * 0.00001 );
56 | vec3 color0 = mix( blue, yellow_dark, v0 );
57 |
58 | float v1 = rand( floor( uv * 40. ).y + u_time * 0.00001 );
59 | vec3 color1 = mix( yellow_bright, blue, v1 );
60 |
61 | float v2 = rand( floor( uv * 80. ).y + u_time * 0.00001 );
62 | vec3 color2 = mix( pink, yellow_bright, v2 );
63 |
64 | float a = ( sc.y - .15 + sin( u_time * 2.5 + sc.x * 8. ) * .1 );
65 | float b = ( sc.y + .13 + sin( - u_time * 2.25 + sc.x * 6. ) * .15 );
66 | float c = ( sc.y - .13 + cos( .25 + u_time * 1.25 + sc.x * 4. ) * .25 );
67 |
68 |
69 | vec3 color = mix( orange, blue, v0 ) * .75;
70 | color = mix( color, color2 * .95, smoothstep( 0.5,.501, c ) );
71 | color = mix( color, color0, smoothstep( 0.501,.5, a ) );
72 | color = mix( color, color1 * 1.25, smoothstep( 0.501,.5, b ) );
73 |
74 | gl_FragColor = vec4(color,1.0);
75 |
76 |
77 | }
--------------------------------------------------------------------------------
/waves/waves.pde:
--------------------------------------------------------------------------------
1 | PShader shader;
2 | String name = "waves";
3 |
4 | void setup() {
5 | size( 1200, 500, P3D );
6 | noStroke();
7 | shader = loadShader( name + ".glsl");
8 | }
9 |
10 | void draw() {
11 |
12 | shader.set("u_resolution", float(width), float(height));
13 | shader.set("u_time", 1000 + millis() / 1000.0);
14 |
15 | shader(shader);
16 | rect(0,0,width,height);
17 |
18 | }
19 | void keyPressed(){
20 | shader = loadShader( name + ".glsl");
21 | saveFrame( name + ".png" );
22 | }
--------------------------------------------------------------------------------
/waves/waves.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicoptere/BUMP/55f0489c583cc1bd951db49f5df4275f7415b769/waves/waves.png
--------------------------------------------------------------------------------