learn GLSL from zero
ToolsCrea con shadersShader MakerCrea shaders gratis en líneaToolkitObras de shaders listas para tu webSketcher LabPinta el hero de tu landing con shaders3D StudioEl editor Three.js en tu navegador
GamesJuega con shadersOnomatoShaderEscribe una palabra y explótalaThe WatcherUn ojo que te sigueAetherVidrio líquido con un ojo adentroBloomcoreUna palabra hace crecer un jardín de luzPyrokineAvienta fuego a la paredVoltaicLa pirámide lanza rayosSurfSurfea un océano de shader

Lección 6 de 10 · Fuerzas en un shader

Drift

Diamantes que se deslizan. Diagonal perezosa.

Drift es gravedad + viento al mismo tiempo pero a velocidades diferentes. X se mueve lento, Y se mueve ligeramente más rápido. El resultado es un desplazamiento diagonal perezoso, el material se desliza como aceite sobre vidrio.

Mancha de aceite en la banqueta.

Velocidades asimétricasp.x += T * 0.06 y p.y += T * 0.09. Diferente velocidad por eje = diagonal. La asimetría es lo que hace que no se vea mecánico.
PruebaInvierte las velocidades: intercambia 0.06 y 0.09. El drift cambia de dirección. Pon una negativa, drift hacia arriba-izquierda.

El código

void main(){
  vec2 p = (2.*gl_FragCoord.xy - R) / min(R.x, R.y);
  vec3 col = vec3(0.02, 0.05, 0.1);
  for(int i = 0; i < 5; i++){
    float fi = float(i);
    float sx = 0.06+fi*.012;
    float sy = 0.09+fi*.018;
    vec2 c = vec2(mod(fi*.7+T*sx,3.)-1.5, mod(fi*1.1+T*sy,3.)-1.5);
    vec2 q = abs(p-c);
    float sz = 0.13+fi*.025;
    float d = q.x+q.y-sz;
    vec2 qs = abs(p-c+vec2(.05,-.06));
    col *= smoothstep(-.02,.12, qs.x+qs.y-sz);
    col += vec3(.05+fi*.18,.75-fi*.1,.5+fi*.08) * smoothstep(.01,-.01,d) * (.55+fi*.12);
    col += vec3(.03+fi*.08,.35-fi*.05,.25+fi*.04) * exp(-max(d,0.)*5.) * .25;
  }
  col = hueShift(col, 0.0);
  gl_FragColor = vec4(col, 1.);
}
close