La niebla es de esas cosas que el jugador solo nota cuando sale mal. La nuestra fallaba de dos formas: parecía un muro gris plano y le daba igual que el jugador la atravesara.

El problema

La primera versión usaba un único volumen para toda la zona. Era barato, pero nunca se movía. Al avanzar, la niebla se quedaba exactamente donde estaba, y el mundo parecía un cuadro en lugar de un lugar.

Seguir al jugador, pero sin pegarse

El nuevo sistema genera partículas de niebla alrededor del jugador y las mantiene en un anillo que se mueve contigo. La clave fue suavizar la velocidad antes de usarla, para que la niebla no pegue saltos cada vez que cambias de dirección:

Censurado

Ese pequeño término de anticipación adelanta un poco el emisor, así que siempre hay niebla esperando donde vas a pisar.

Prueba de densidad de niebla en las calles
Prueba de densidad de niebla en las calles

Dos capas, dos shaders

Dividimos la niebla en una capa alta y otra a ras de suelo, cada una con su propio shader. La de suelo se pega al terreno y reacciona más rápido; la alta se desplaza despacio y da profundidad.

  • Capa alta: partículas grandes y suaves que se desvanecen con la distancia.
  • Capa de suelo: partículas pequeñas y densas con poca vida.
  • Ráfagas de densidad cuando te paras, para que quedarte quieto se sienta un poco menos seguro.

Rendimiento

Todo esto tenía que funcionar en equipos modestos. Tras ajustar el número de partículas y su duración, las calles se mantienen por encima de 90 FPS en una GTX 1660, que era nuestro objetivo.

Lo siguiente: asegurarnos de que la niebla se lleva bien con la iluminación del resto de zonas.