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.
Cambia 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.);
}