Como has pedido experiencias, aquí están las mías.
En los días en que estaba programando juegos de PS2, el enfoque de "quads alfa en capas" era una forma en que a menudo implementamos la niebla. Ocasionalmente como niebla terrestre, pero mucho más comúnmente como niebla de pantalla completa. Y funcionó bien en cualquier caso. Entonces sí, era viable en los días previos al sombreador de fragmentos.
Especie de. El problema, como ha notado, era que si desea una niebla suave como la que se ve en la captura de pantalla, necesita un número bastante absurdo de quads alfa.
En la PS2, generalmente podríamos permitirnos entre tres y cinco capas. Que definitivamente parecía "paredes" de niebla flotando frente a ti. Más que eso y la velocidad de relleno comenzó a matar nuestra velocidad de fotogramas.
Normalmente, estos cuádriceps se dibujarían a distancias fijas frente a la cámara, por lo que nunca tendría la situación que menciona, "caminando" a través de uno de ellos. Por otro lado, al usar esas distancias fijas, todo lo demás en el mundo hacepasar a través de esos planos a medida que el jugador se mueve, lo cual es una falla gráfica bastante obvia. Casi todos lo hicieron en ese entonces, pero ahora no sería aceptable (a menos que lo hicieras por razones estilísticas). (Excepción: algunas personas calcularon los valores de niebla como parte del equivalente de PS2 de un sombreador de vértices. Eso funcionó y fue mucho más rápido, pero requería que sus modelos estuvieran altamente teselados. No se podían tener paredes largas, por ejemplo, porque la niebla era solo se calculó en las esquinas de la pared y luego se extendió por toda la cara de la pared.La pared parecía completamente empañada si estaba parado justo al lado de su centro, por ejemplo, ya que solo estaba probando los niveles de niebla en su puntos finales)
Tenga en cuenta que si coloca quads de niebla estáticamente en el mundo (como menciona como una posibilidad), entonces no podrá obtener la apariencia de niebla extremadamente suave, como en la imagen que proporciona, habrá superposiciones extrañas entre quads adyacentes según la orientación del espectador. Esas superposiciones pueden aparecer como rayas o trapecios (si los quads no tienen textura) o como grupos (si tienen textura).
Pero supongamos que estamos usando quads anchos y orientados a la pantalla para hacer esta niebla en el suelo y hacer algunos cálculos sobre cómo hacer una niebla realmente suave usando este método, en terreno plano, con una cámara mirando hacia adelante, esa es nuestra situación ideal. . Supongamos una resolución HD: 1920x1080, lo que pone nuestro horizonte en la línea de exploración 540. Supongamos también que tenemos visibilidad hasta el horizonte (es decir, suponiendo que la niebla no alcanza la opacidad total antes de llegar al horizonte). Con un quad de niebla que comienza y uno que se detiene en cada línea de exploración (para obtener una niebla suave), necesitamos (540 * 2 ==) 1080 quads de niebla. Cada uno de estos 1080 quads de niebla cubrirá toda la extensión horizontal de la pantalla,
Hagamos una estimación baja y digamos que, en promedio, un avión de niebla cubrirá aproximadamente 300 filas de píxeles. Los más cercanos cubrirán menos, los más lejanos cubrirán menos, las filas del medio cubrirán mucho más.
Con esa estimación, obtenemos (1920x300 ==) 576,000 píxeles siendo tocados por el quad de niebla promedio. En total, eso es (576,000 * 1080 ==) 622,080,000 píxeles tocados en total para todo el efecto de "niebla suave a través de la representación de un montón de geometría translúcida". Y ese número aumentará para las personas que se ejecutan en una resolución más alta. Y lo que es más, obtenemos el mismo número de pruebas contra el z-buffer, y casi el mismo número de operaciones de mezcla de píxeles, ya que todas estas capas transparentes se dibujan una sobre la otra una y otra vez. Eso es muchos píxeles.
Y ese es el mejor de los casos: obtendrá mucha más cobertura de pantalla de los quads de niebla si el usuario mira hacia abajo o se agacha.
Tenga en cuenta que dado que estamos superponiendo 1080 quads, probablemente queremos un valor alfa de aproximadamente (1.0 / 1080 ~ =) 0.0009 establecido en cada uno, de modo que nuestra niebla alcance la opacidad total si mira a través de todos los 1080 quads. (Podríamos ir más alto que eso, pero este es el valor asumiendo que queremos extender el rango tanto como sea posible). Tenga en cuenta que este valor no se puede representar como el componente alfa de un valor de color de 32 bits (256 * 0.0009 ~ = 0.237 y, por lo tanto, se redondeará a 0 si lo intenta). Deberá proporcionar el valor de 0.0009 a OpenGL como un valor de coma flotante para que esto funcione. (También tenga en cuenta que en realidad no querrá establecer este mismo valor en cada uno, aunque definimos que queríamos que comenzara un quad y que terminara en cada línea de exploración debajo del horizonte para darnos una niebla suave,
También tenga en cuenta que las mezclas de niebla no funcionarán correctamente usando este enfoque, como lo harían con un sombreador moderno: en lugar de obtener un cálculo de "mezcla entre el color del objeto base y el color de la niebla usando este porcentaje", obtendrá 1080 cálculos de "mezcla entre el color hasta ahora y el color de la niebla por el porcentaje de niebla". Lo que significa que la niebla afectará a los objetos después de una caída logarítmica. (Es decir, un objeto afectado por 20 quads de niebla aparecerá menos del doble de empañado que algo afectado por 10 quads de niebla, porque los primeros quads de niebla tienen más impacto en la operación de mezcla).
Todo lo cual es para decir: Por favor, use un sombreador de fragmentos.
No realmente. Es más simple y más barato, más rápido y más rápido de implementar y menos propenso a errores, y le permite volver a hacer su juego y es mejor en todas las formas posibles. Lo hubiéramos hecho totalmente en la era de PS2 si fuera incluso vagamente posible en ese momento.