0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
–
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
–
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
/
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
/
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
ANNO·​TRICESIMO·​DIE·​DVCENTESIMO·​QVADRAGESIMO·​PRIMO·​VITÆ·​POVYA
One of the shaders so that you get what I mean by the algorithm:
#ifdef GL_ES precision mediump float; #endif
uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time;
vec3  mod289(vec3  x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
vec2 mod289(vec2 x) { return x - floor(x * (1.0 / 289.0)) *  289.0;  }
vec3 permute(vec3 x) { return mod289(((x*34.0)+1.0)*x); }
float  snoise(vec2  v)  {  const  vec4  C = vec4(0.211324865405187, //
(3.0-sqrt(3.0))/6.0    0.366025403784439,    //    0.5*(sqrt(3.0)-1.0)
-0.577350269189626,  //  -1.0 + 2.0 * C.x 0.024390243902439); // 1.0 /
41.0 vec2 i = floor(v + dot(v, C.yy) ); vec2 x0  =  v  -  i  +  dot(i,
C.xx);  vec2 i1; i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
vec4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1; i  =  mod289(i);  //  Avoid
truncation  effects  in  permutation  vec3 p = permute( permute( i.y +
vec3(0.0, i1.y, 1.0 ))
i.x + vec3(0.0, i1.x, 1.0 ));

vec3    m    =    max(0.5   -   vec3(dot(x0,x0),   dot(x12.xy,x12.xy),
dot(x12.zw,x12.zw)), 0.0); m = mm ; m = mm ; vec3 x = 2.0 * fract(p
C.www) - 1.0; vec3 h = abs(x) - 0.5; vec3 ox = floor(x + 0.5); vec3 a0
= x - ox; m = 1.79284291400159 - 0.85373472095314 * ( a0a0 + h*h  );
vec3 g; g.x = a0.x * x0.x + h.x * x0.y; g.yz = a0.yz * x12.xz + h.yz *
x12.yw; return 130.0 * dot(m, g); }

void  main()  {  vec2  st  =  gl_FragCoord.xy/u_resolution.xy; st.x *=
u_resolution.x/u_resolution.y; vec3 color = vec3(0.0);
vec2 pos = vec2(st3.); vec2 pos2 = vec2(st2.);
float DF = 0.0; float DF2 = 0.0;
// Add a random position float a = 0.0; float a2 = 0.0;
vec2 vel = vec2(u_time*.1); vec2 vel2 = vec2(u_time*1.5);
DF += snoise(pos+vel).25+.25; DF2 += snoise(pos+vel).4+.2;
//        Add        a        random        position        a        =
snoise(posvec2(cos(u_time0.3),sin(u_time0.1))0.1)1.950;        a2
=      snoise(pos2vec2(sin(u_time0.656),cos(u_time0.3))*0.1)*2.030;
vel = vec2(cos(a),sin(a)); vel2 = vec2(sin(a2),cos(a2));
DF            +=           snoise(pos+vel)*-0.238+0.122;           DF2
+= snoise(pos2+vel2)*0.458+-0.286;
color      =     vec3(smoothstep(2.036,0.102,fract(1.0     -     DF)),
smoothstep(-0.060,0.422,fract(DF2)),
smoothstep(0.668,0.494,fract(DF2)) );
vec3   color2   =   vec3(smoothstep(-2.076,-1.858,fract(1.0  -  DF2)),
smoothstep(-0.420,-0.458,fract(DF)),
smoothstep(0.924,2.126,fract(DF)) );
gl_FragColor = vec4(mix(1.0-color, color2, 0.5), 1.0); }

Trying to come up with a nice shader for the Bret Victor’s Quotes Screensaver, I toyed with the simplex based shader I had. I then thought about having two layers moving in different ways and so I made it, and then toyed with the coloring algorithm. I ended up with a formula that was so strange, and the colors I ended up finding were really amazing. You can see some of them.

Making Different Simplex Shaders

Making Different Simplex Shaders (10/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (11/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (12/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (2/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (3/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (4/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (5/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (6/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (7/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (8/12)

Making Different Simplex Shaders

Making Different Simplex Shaders (9/12)

Quotes & Excerpts

The 1% of VC firms that get this big stop being exposed to the risk in their own investments at all — when you collect 2% a year to manage $50 billion, that’s a billion dollars landing in your pocket annually whether any company you funded lives or dies. Those firms also stop legally even being venture capital firms, making them unaccountable to markets, founders, or the law — and that’s how they become “Cancer Capital”

VC was meant to be a small percentage of overall investment because it represents the high-risk, high-reward part of a portfolio; to be healthy, most of a portfolio — or most of an economy — needs to focus on assets that are more stable and predictable. But a cancer grows from a cell that a body needs in small, healthy amounts, and that turns deadly when it grows without limit until it harms, or even kills, its host.

Day's Context
Open Books
Counterblast
Written byMaestro McLuhan
&Harley Parker
Creative SchoolsThe Grassroots Revolution That's Transforming Education
Written byKen Robinson
&Lou Aronica
Leonardo Da Vinci
Written byWalter Isaacson
Project Management for DummiesSecond Edition
Written byNick Graham
RachmaninoffComposer, Pianist, Conductor
Written byBarrie Martyn
Year 30, day 241 of Pouya's Life