Lección 4 de 10 · Patrones en shaders
Tablero
Diamantes en el tablero. El piso del Overlook.
¿Cómo alternas dos colores en una cuadrícula? Sumas la fila y la columna. Si la suma es par, un color. Si es impar, el otro. Eso es todo.
mod(x, 2.), una pregunta, dos respuestas. El patrón más antiguo.
floor() redondea hacia abajo, convierte las coordenadas en números enteros. Esos números son la fila y la columna de cada celda. mod() te dice si la suma es par o impar.
mod(x, 2.)Devuelve el residuo de dividir entre 2. Si el número es par, devuelve 0. Si es impar, devuelve 1. Una pregunta, dos respuestas, un tablero entero.
Cambia el
4. a 8., tablero más fino. Cambia uno de los colores para que sea tu tablero. Prueba sumarle + T * 0.5 a p.x antes del floor, el tablero se desliza.El código
void main(){
vec2 p = (2.*gl_FragCoord.xy - R) / min(R.x, R.y);
float check = mod(floor(p.x*4.)+floor(p.y*4.), 2.);
vec2 cell = fract(p * 4.);
vec2 q = abs(cell - 0.5);
float diamond = q.x + q.y;
float inner = smoothstep(0.35, 0.32, diamond) * check;
float innerGlow = exp(-max(diamond-.25,0.)*8.) * check * .3;
float groove = smoothstep(0.44,0.5, max(q.x, q.y));
vec2 qs = abs(cell - 0.5 + vec2(.03,-.04));
float dsh = smoothstep(0.35,.1, qs.x+qs.y) * (1.-inner) * check * .35;
vec3 a = vec3(0.9, 0.2, 0.12);
vec3 b = vec3(0.06, 0.04, 0.12);
vec3 gold = vec3(0.95, 0.75, 0.2);
vec3 col = mix(a, b, check);
col *= 1. - groove * .6;
col -= vec3(dsh);
col += gold * inner;
col += vec3(.5,.35,.1) * innerGlow;
gl_FragColor = vec4(col, 1.);
}