Lección 10 de 10 · Patrones en shaders
Tu patrón
Chladni, estrella, espiral, anillos. Todo visible.
Esta lección no enseña nada nuevo. Junta todo lo que aprendiste en Patterns: rayas, fract, polar, espiral, espejo, radiales, Chladni.
Tus variables. Tus frecuencias. Tu firma.
Mira el código. Cada línea ya la conoces:
- →
abs(p)espejo (lección 07) - →
atan(p.y, p.x)coordenadas polares (lección 05) - →
1. / (d + 0.12)túnel, 1/distance comprime al centro (Start Here 10) - →
sin(n * ang + inv * 8.)Chladni en polar con túnel (lección 09 + 05) - →
exp(-d * 2.0)glow al centro, la luz emerge
Este es tu patrón. Hazlo tuyo.
Cambia el
5. para más o menos radiales. Cambia el 8. para más o menos giros de la espiral. Cambia los colores. Este patrón es tuyo ahora.Freebie
AUTOPILOT
Reemplaza la líneacol += vec3(.12,.08,.2) * chladni * (1.-star); con esta:col += iri(chladni * 0.4 + T * 0.05) * chladni * (1.-star);
El fondo respira.
El código
void main(){
vec2 p = (2.*gl_FragCoord.xy - R) / min(R.x, R.y);
float ang = atan(p.y, p.x);
float d = length(p);
float z = sin(5.*3.14*p.x)*sin(3.*3.14*p.y)+sin(3.*3.14*p.x)*sin(5.*3.14*p.y);
float chladni = pow(abs(z), 0.8);
float r = 0.6 + 0.2 * sin(ang*5.+T*0.3);
float star = smoothstep(0.02, -0.02, d-r);
float spiral = step(0.5, sin(ang*3.+d*8.-T*0.5)*.5+.5);
float rings = smoothstep(0.03,0.0, abs(fract(d*4.)-.5)-.3);
vec3 col = vec3(0.02, 0.015, 0.04);
col += vec3(.12,.08,.2) * chladni * (1.-star);
col += vec3(.95,.3,.15) * star * spiral;
col += vec3(0.,.85,.75) * star * (1.-spiral);
col += vec3(.95,.8,.15) * rings * .3;
col += vec3(.5,.15,.08) * exp(-abs(d-r)*4.) * .5;
col += vec3(.8,.6,.95) * exp(-d*3.) * .4;
gl_FragColor = vec4(col, 1.);
}