Gray-Scott Reacción-Difusión
Dos sustancias químicas virtuales se alimentan, reaccionan y se difunden por un campo que corre por completo en la GPU. Ajusta las tasas de aporte y retiro para deslizar entre corales, laberintos y células que se dividen.
La reacción
Gray-Scott modela dos sustancias químicas, A y B, repartidas sobre una cuadrícula. A se aporta en todas partes; B se retira en todas partes. Donde se encuentran, la reacción A + 2B → 3B convierte A en más B — un bucle autocatalítico que pelea constantemente contra los términos de aporte y retiro que intentan borrarlo.
Cada celda se actualiza a partir de sus vecinas en cada paso:
A' = A + (Dₐ∇²A − AB² + f·(1−A))·dtB' = B + (D_b∇²B + AB² − (k+f)·B)·dt
Todo el zoológico de patrones vive en solo dos números — la tasa de aporte f y la tasa de retiro k.
Cómo funciona
El estado vive en una textura — A en el canal rojo, B en el verde. Cada paso renderiza un quad a pantalla completa a través de un fragment shader que lee las nueve vecinas de una celda, calcula el laplaciano y escribe el siguiente estado. Dos texturas hacen ping-pong: se lee de una, se escribe en la otra, se intercambian y se repite.
Un solo fotograma mostrado corre la simulación una docena de veces antes de dibujar — la dinámica necesita muchos pasos pequeños para verse fluida, y a la GPU le sobran. Cuando el dispositivo lo permite, el campo usa texturas de coma flotante de 16 bits para gradientes más limpios, y recurre a 8 bits cuando no.
Pintar es solo otra escritura: mientras el puntero está presionado, el shader de simulación fija B en 1.0 dentro de un pequeño radio alrededor del cursor, y la reacción se encarga del resto.
Ajustes
El aporte y el retiro delimitan bandas estrechas de comportamiento, y pequeños movimientos cruzan las fronteras entre regímenes completamente distintos:
- Corales — frentes ramificados que crecen y llenan el espacio.
- Mitosis — manchas que crecen, se estiran y se parten en dos.
- Puntos — motas estables que se asientan en una retícula suelta.
- Laberinto — muros sinuosos de laberinto que nunca terminan de cerrarse.
- Gusanos — filamentos que se retuercen, derivan y se reconectan.
Agradecimientos
La matemática, la intuición de los parámetros y los valores de aporte/retiro de los ajustes vienen todos del maravilloso tutorial de Karl Sims, Reaction-Diffusion Tutorial. Si quieres entender de verdad lo que pasa aquí, léelo primero.