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 2 de 10 · Fuerzas en un shader

Gravity

Los círculos caen. Cada uno a su peso.

La primera fuerza: sumar T a una coordenada. p.y += T * 0.2 desplaza el campo hacia arriba continuamente, como si la gravedad jalara el material hacia abajo y tú vieras desde arriba.

Miel en cámara lenta.

p.y += T * velocidadVelocidad positiva = sube (la textura baja). Negativa = baja (la textura sube). El número controla qué tan pesado se siente.
PruebaCambia el 0.12 a 0.04, lava espesa. A 0.6, cascada. Cambia el otro 0.1 (qué tanto difiere cada círculo del siguiente) a 0.0 y caen todos al unísono.

El código

void main(){
  vec2 p = (2.*gl_FragCoord.xy - R) / min(R.x, R.y);
  vec3 col = vec3(0.04, 0.02, 0.1);
  for(int i = 0; i < 5; i++){
    float fi = float(i);
    float speed = 0.12 + fi * 0.1;
    float x = -0.8 + fi * 0.4;
    float y = mod(-T*speed + fi*1.3, 3.) - 1.5;
    vec2 c = vec2(x, y);
    float r = 0.1 + fi * 0.03;
    float d = length(p-c)-r;
    float ds = length(p-c+vec2(.04,-.07-speed*.15))-r;
    col *= smoothstep(-.02,.15,ds);
    col += vec3(.92,.2,.06) * smoothstep(.02,-.02,d) * (.6+fi*.1);
    col += vec3(.95,.55,.2) * exp(-max(d,0.)*4.) * .25;
    col += vec3(.5,.1,.02) * smoothstep(.0,-.3,d+.3) * smoothstep(-.8,.0,p.y-y) * .1;
  }
  gl_FragColor = vec4(col, 1.);
}
close