Controles
Aporte
0.0545
Retiro
0.0620
Dif. A
1.00
Dif. B
0.50
Ajustes
Volver a la galería
Experimento2025WebGL

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.

Haz clic y arrastra por el campo para pintar sustancia en él.

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))·dt
  • B' = 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.