Reacción-Difusión en una esfera
Las mismas dos sustancias químicas en pugna que en Gray-Scott, pero corriendo sobre la superficie de una icoesfera — cada vértice reacciona y se difunde con sus vecinos de la malla, todo en la GPU. Ajusta las tasas de aporte y retiro para deslizar entre corales, laberintos y células que se dividen.
La reacción
Este es el mismo modelo de Gray-Scott que el campo plano de reacción-difusión: dos sustancias químicas, A y B. A se aporta en todas partes, B se retira en todas partes, y donde se encuentran la reacción A + 2B → 3B convierte A en más B. Cada punto se actualiza a partir de sus vecinos en cada paso:
A' = A + (Dₐ∇²A − AB² + f·(1−A))·dtB' = B + (D_b∇²B + AB² − (k+f)·B)·dt
Corriéndolo sobre una esfera
En una cuadrícula plana el laplaciano ∇² es fácil — cada celda tiene exactamente ocho vecinos en una caja 3×3 ordenada. Una esfera no tiene esa cuadrícula. En cambio, la superficie es una icoesfera: un icosaedro subdividido cinco veces en ~10 000 vértices, cada uno conectado a seis vecinos — salvo las doce esquinas originales, que conservan solo cinco.
Como el vecindario es irregular, el laplaciano se convierte en un operador paraguas: el promedio de los vecinos de un vértice menos el propio vértice. Esa única definición sirve tanto para el caso de cinco como para el de seis vecinos, así que la matemática del campo plano se traslada casi sin cambios.
Cómo funciona
La icoesfera y su adyacencia se precalculan una sola vez cuando carga la página. El estado A/B de cada vértice se empaca en un solo píxel de una textura de datos, y una segunda textura de búsqueda guarda un puntero a los vecinos de cada vértice. Cada paso renderiza esa textura de estado a través de un fragment shader que reúne los vecinos de un vértice, calcula el laplaciano paraguas y escribe el siguiente estado — dos texturas hacen ping-pong una docena de veces por fotograma mostrado.
Para dibujar el resultado, el vertex shader de la esfera consulta el estado químico de cada vértice directamente de esa textura, lo colorea con la misma rampa de paleta que el campo plano y empuja la superficie hacia afuera donde la sustancia B es fuerte. Cuando el dispositivo las admite, las texturas de coma flotante de 16 bits mantienen limpios los gradientes.
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.