¿Cómo puedo crear una niebla volumétrica basada en la altura?

10

Recientemente, he estado buscando técnicas para crear niebla volumétrica en algún nivel de posición Y del mundo del juego. Pero todo lo que he encontrado es un poco de niebla hecha usando un sistema de partículas o una niebla de motor incorporada que realmente no se ajusta a lo que estoy buscando.

En mi caso, necesito una niebla que sea eficiente y densa. Debería estar en todo el mundo del juego, pero obviamente, por razones de rendimiento, solo se puede representar como parte de una cámara o sombreador y parece que se está moviendo, aunque es solo una ilusión. Podría establecer un sistema de partículas si es la mejor opción, adjuntarlo a la cámara y hacer que se mueva.

Entonces, la pregunta principal sigue siendo: ¿cómo puedo implementar una niebla volumétrica que sea densa y funcione eficientemente?

Como motor en particular que estoy usando, es Unity.

A modo de ejemplo, quiero decir, aquí está el enlace a un juego con el efecto que estoy buscando: Astromike

Captura de pantalla de ejemplo de un juego usando una densa niebla basada en la altura.

Candid Moon _Max_
fuente
Un poco de un novato GLSL aquí, pero ¿qué hay de teñir los píxeles en el sombreador de fragmentos, en función de su coordenada Y que recuperarías del sombreador de vértices?
Quentin
2
¿Has revisado la charla de Unity sobre "Efectos especiales con profundidad" ? Si bien tiene varios años, los principios aún se aplican. Cubren tanto la niebla basada en la altura como la "niebla esponjosa" que se acumula en espacios vacíos y se estrecha alrededor de los obstáculos, y dado que todos los ejemplos son Unity, debería ser fácil de aplicar.
DMGregory
@Quentin sí, buena idea, aunque ¿será sombreador por objeto, verdad? Entonces requeriría cambiar muchos sombreadores. También soy un novato en la programación de sombreadores, por lo que podría haber escrito algunas tonterías. Pero hasta donde yo sé, los sombreadores de vértices se aplican a los objetos. Y la coloración puede no dar efecto de movimiento. Entiendo que si quiero movimiento, cada pequeña cosa que se mueve dentro debe ser un objeto, por lo que el sistema de partículas podría ser la mejor opción.
Candid Moon _Max_
@wondra sí, este podría no ser el mejor enfoque si es cierto, la transparencia es muy pesada para el rendimiento.
Candid Moon _Max_
1
Las listas tampoco son adecuadas para nuestro formato de preguntas y respuestas, porque ¿cuándo se completa una lista? ¿Cuántas "situaciones diferentes" son suficientes? ¿Por qué métrica juzgamos "mejor"? En general, este formato funciona mejor con preguntas claramente enfocadas con respuestas que puede validar. Entonces, si siente que tiene una respuesta que se ajusta a sus necesidades, en realidad es mejor editar su pregunta para reducirla a lo que realmente necesitaba en primer lugar, en lugar de dejarla demasiado amplia e incompleta. Otros usuarios siempre pueden hacer otras preguntas específicas a otros aspectos, obteniendo respuestas más específicas relevantes para su caso
DMGregory

Respuestas:

24

Soy el creador de Astromike. :)

En realidad, estoy usando un truco bastante simple para que parezca niebla. Estoy desarrollando Astromike usando Unity, así que si usas Unity, puedes hacer lo mismo. Pero supongo que también puede recrear el mismo sombreador para otros motores.

Lo que hago es configurar un avión para la niebla y agregar un material con sombreador Particle / Alpha Blended con un Soft Particle Factor (0.32 en mi caso). Eso es.

Avión de niebla: http://imgur.com/a/MAEFW

Configuración: http://imgur.com/NJVAaIQ

Funciona para mí debido al ángulo de la cámara y podría no funcionar para otras personas.

El resto es solo una pila de post-efecto (Bloom, Viñeta, etc.) Espero que esto ayude. Salud.

Mikea15
fuente
1
¡Guauu! Genial, gracias por compartir! El juego es increíble :)
Candid Moon _Max_
Parece increíble y muy simple, intenté hacerlo en mi proyecto. Parece que solo funciona con una cámara de perspectiva (nuestro juego es ortográfico).
Jeff
esto es demasiado bueno para ser verdad jaja agradable
Lestat
Hola @ Mikea15, muy bonito juego! Desafortunadamente, no puedo recrear el efecto que mencionó: agregué Bloom a la pila de procesamiento posterior, sin embargo, se extiende sobre los objetos incluso si el plano de niebla está detrás de ellos (no es sorprendente), mientras que en su demostración parece que los bordes verticales de la Las columnas están limpias del efecto de floración. Además, en mi Soft Particle Factor no cambia nada, independientemente del valor. Sería genial si pudieras proporcionar una pequeña escena de demostración que mostrara esto. ¡Gracias!
Dawid
@Dawid, sé que es tarde, pero debes configurar la ruta de representación de la cámara en diferido y asegurarte de que la calidad de las partículas blandas se verifique en la configuración del proyecto
Rito Ramos