En muchos juegos donde el jugador puede ir bajo el agua, parece que cuando miras dónde está la mitad superior de la pantalla en el aire y la mitad inferior de la pantalla está en el agua, es casi como si el agua no existiera y el jugador está ... volando lentamente con sonidos de agua?
¿Hay alguna forma lógica de resolver esto? Un algoritmo? No parece que haya surgido ninguna solución ya que muchos juegos todavía tienen esto. No quiero cometer el mismo error.
3d
rendering
terrain-rendering
water
LiquidFeline
fuente
fuente
Respuestas:
¿Qué tal simplemente no permitir esta situación?
No sé cómo estás haciendo tu juego, pero si detectas que la vista estará parcialmente bajo el agua, puedes forzar a la cámara a estar sobre el agua, y solo cuando toda la vista esté debajo del agua, puedes cambiar a vista submarina
Dependiendo de cómo lo haga, esto podría significar que hay un retraso adicional desde el momento en que comienza a bucear y cuando realmente ve la escena desde debajo de la superficie. Esto puede ser algo bueno desde una perspectiva UX, así que siéntete libre de experimentar.
En una nota separada pero relacionada, me pregunto por qué la mayoría de las escenas submarinas se vuelven cristalinas ... Si alguna vez sumerges la cabeza bajo el agua, notarás que tus ojos no están diseñados para la vista submarina y, por lo tanto, todo parece borroso. Tendría que usar gafas para ver claramente bajo el agua.
Y además, las cosas se ven (y oyen) muy diferentes bajo el agua que sobre el agua. El agua absorbe la luz mucho más rápido que el aire, por lo que cuanto más se aleja la luz, menos luz llegará a sus ojos. Esto significa que cuanto más profundizas, más azules se ven las cosas (la luz roja tiene menos energía y, por lo tanto, se absorbe más fácilmente que la luz azul). De hecho, a solo 12 metros bajo el agua, la sangre se ve negra, no roja.
Todavía no he visto un juego no especializado que incluso intente conseguir entornos subacuáticos correctamente ...
fuente
El problema al que te refieres tiene que ver con el recorte del volumen de visión de la cámara a través del plano de agua; Los "efectos subacuáticos" típicos se realizan a través de los efectos posteriores al proceso de pantalla completa, y no se verían correctos si la vista se recortara de esta manera (sería el problema opuesto).
Incluso si te molestas en detectar el caso de recorte (potencialmente difícil) y tijeras o recortes el efecto subacuático de pantalla completa para que solo se aplique a la escena subacuática (que es una posible solución que podrías explorar), aún tendrías el problema del propio plano de agua en sí. La transición allí todavía sería un artefacto visual discordante. Podías detectar ese avión y difuminarlo fuertemente; Esto es probablemente lo más cercano que puede llegar a una analogía del mundo real de lo que puede ser la vista a través de una lente de cámara parcialmente sumergida.
Alternativamente, evite que esto suceda por completo: no deje que la cámara vaya debajo del plano de agua si el jugador está "por encima" del agua o por encima del plano de agua cuando el jugador está "debajo" del agua. Esto solo funcionará realmente si tiene modos de operación discretos del jugador para arriba / debajo del agua, y funciona mejor si hay un botón físico u otra acción clara y obvia que el jugador puede tomar para la transición entre "nadar en la superficie" y "nadar debajo la superficie."
En lugar de presionar una tecla explícitamente para bucear, puede interpretar el movimiento hacia adelante mientras la cámara está inclinada lo suficiente como para significar "bucear". Luego puede usar un efecto gráfico (salpicaduras o lo que sea) para ocultar la transición de la cámara a través del plano del agua, que normalmente no podría cruzar.
Utilizamos una técnica como esta en Guild Wars 2.
fuente
Los juegos suelen activar algún tipo de efectos, principalmente niebla azul, cuando la cámara está bajo el agua. Para manejar la situación en la que el plano cercano atraviesa la superficie del agua, puede encender el sombreador de niebla cuando la cámara se acerca a la superficie del agua, pero luego agregar un código al sombreador de píxeles que calcula el punto en el plano cercano correspondiente a ese píxel, y activa la niebla solo si ese punto está debajo de la superficie del agua.
Si la niebla se realiza como un proceso posterior, al hacer un pase de pantalla completa, esto es especialmente fácil: solo tiene que calcular la posición en el espacio mundial de cada vértice del quad o triángulo de pantalla completa en el plano cercano (con el inverso ver / matriz de proyección) e interpolar este valor al sombreador de píxeles; entonces puede verificar su componente vertical y ver si está por encima o por debajo del plano de agua.
Para obtener puntos de bonificación, puede usar la misma técnica para agregar una textura de unos pocos píxeles de grosor para representar el menisco en la superficie del agua, por lo que no se parece tanto a una línea afilada.
fuente
Tengo dos métodos; Uno usa un sombreador, el otro podría usar una GUI. Ambos comenzarán igual:
"Simplificado" -
If, Object(Camera) is in 3d Space(Water bounding box/whatever you choose) trigger a shader/GUI.
Shader le dará más realismo, puede aplicar una distorsión como esta
Niebla como Com. Boy declaró, se puede aplicar a través de GUI. Cree una foto, con una transparencia parcial y úsela como GUI en toda la vista de la cámara. Para la foto que proporcionaste, probaría un color marrón.
Esto se ha utilizado en un juego de terror llamado Drea D Out. Si el jugador se acercara a un fantasma, la pantalla se nublaría. Aunque no se usó bajo el agua, dio un efecto similar :)
Siempre puede elegir ambos métodos o hacer un sombreador que cambie el color.
fuente