Dans de nombreux jeux où le joueur peut aller sous l'eau, il semble que lorsque vous regardez où la moitié supérieure de l'écran est dans l'air, et la moitié inférieure de l'écran est dans l'eau, c'est presque comme l'eau n'existe pas et le joueur vole lentement avec des sons d'eau?
Existe-t-il un moyen logique de résoudre ce problème? Un algorithme? Il ne semble pas encore qu'une solution ait été trouvée car de nombreux jeux l'ont encore. Je ne veux pas faire la même erreur.
3d
rendering
terrain-rendering
water
LiquidFeline
la source
la source
Réponses:
Que diriez-vous simplement de ne pas autoriser cette situation?
Je ne sais pas comment vous faites votre jeu, mais si vous détectez que la vue sera partiellement sous l'eau, vous pouvez forcer la caméra à être au-dessus de l'eau, et seulement lorsque la vue entière serait sous l'eau, vous pouvez passer à la vue sous-marine.
Selon la façon dont vous le faites, cela pourrait signifier qu'il y a un délai supplémentaire à partir du moment où vous commencez à plonger et lorsque vous regardez réellement la scène sous la surface. Cela peut être une bonne chose du point de vue UX, alors n'hésitez pas à expérimenter.
Sur une note distincte mais connexe, je me demande pourquoi la plupart des scènes sous-marines sont claires comme du cristal ... Si jamais vous mettez la tête sous l'eau, vous remarquerez que vos yeux ne sont pas conçus pour la vue sous-marine, et donc tout semble flou. Il faudrait porter des lunettes pour voir clairement sous l'eau.
De plus, les choses semblent (et entendent) très différentes sous l'eau que hors de l'eau. L'eau absorbe la lumière beaucoup plus rapidement que l'air, donc plus la lumière se déplace, moins la lumière arrivera à vos yeux. Cela signifie que plus vous allez profondément, plus les choses sont bleues (la lumière rouge a moins d'énergie et est donc absorbée plus facilement que la lumière bleue). En fait, à seulement 12 mètres sous l'eau, le sang semble noir, pas rouge.
Je n'ai pas encore vu un jeu non spécialisé qui essaie même de créer des environnements sous-marins corrects ...
la source
Le problème auquel vous faites référence a à voir avec l'écrêtage du volume de vue de la caméra dans le plan d'eau; les "effets sous-marins" typiques sont effectués via des effets de post-traitement en plein écran, et ne sembleraient pas corrects si la vue est coupée comme ceci (ce serait juste le problème opposé).
Même si vous prenez la peine de détecter le cas d'écrêtage (potentiellement difficile) et de couper ou de couper l'effet sous-marin autrement en plein écran afin qu'il ne s'applique qu'à la scène sous-marine (qui est une solution potentielle que vous pourriez explorer), vous auriez toujours le problème du plan d'eau lui-même. La transition, il y aurait toujours un artefact visuel choquant. Vous pouvez détecter cet avion et le brouiller fortement; c'est probablement le plus proche que vous pouvez obtenir d'une analogie réelle de ce que la vue peut être à travers un objectif d'appareil photo partiellement submergé.
Sinon, évitez que cela ne se produise complètement: ne laissez pas la caméra passer sous le plan d'eau si le joueur est "au-dessus" de l'eau ou au-dessus du plan d'eau lorsque le joueur est "au-dessous" de l'eau. Cela ne fonctionnera vraiment que si vous avez des modes de fonctionnement discrets pour les joueurs au-dessus / en dessous de l'eau, et fonctionne mieux s'il y a un bouton physique ou une autre action claire et évidente que le joueur peut prendre pour faire la transition entre "nager en surface" et "nager en dessous" la surface."
Au lieu d'une frappe explicite pour plonger, vous pouvez interpréter le mouvement vers l'avant pendant que la caméra est suffisamment baissée pour signifier «plonger». Vous pouvez ensuite utiliser un effet graphique (éclaboussures ou autre) pour masquer la transition de la caméra à travers le plan d'eau, qu'elle ne pourrait normalement pas traverser.
Nous avons utilisé une technique comme celle-ci dans Guild Wars 2.
la source
Les jeux activent généralement une sorte d'effets, principalement du brouillard bleu, lorsque la caméra est sous l'eau. Pour gérer la situation où le plan proche passe à travers la surface de l'eau, vous pouvez activer le shader de brouillard lorsque la caméra se rapproche de la surface de l'eau, mais ensuite ajouter du code au pixel shader qui calcule le point sur le plan proche correspondant à ce pixel, et active le brouillard uniquement si ce point est sous la surface de l'eau.
Si le brouillard est effectué en post-traitement, en effectuant un passage en plein écran, cela est particulièrement facile - il vous suffit de calculer la position de l'espace mondial de chaque sommet du quad ou du triangle en plein écran sur le plan proche (avec l'inverse matrice de visualisation / projection) et interpoler cette valeur jusqu'au pixel shader; alors vous pouvez vérifier sa composante verticale et voir si elle est au-dessus ou en dessous du plan d'eau.
Pour les points bonus, vous pouvez utiliser la même technique pour ajouter une texture de quelques pixels d'épaisseur pour représenter le ménisque à la surface de l'eau, de sorte qu'il ne ressemble pas tellement à une ligne nette.
la source
J'ai deux méthodes; L'un utilise un shader, l'autre pourrait utiliser une interface graphique. Les deux commenceront de la même façon:
"Simplifié" -
If, Object(Camera) is in 3d Space(Water bounding box/whatever you choose) trigger a shader/GUI.
Shader donnera plus de réalisme, vous pouvez appliquer une distorsion comme celle-ci
Fog Like Com. Garçon a déclaré, peut être appliqué via l'interface graphique. Créez une photo, avec une transparence partielle et utilisez-la comme interface graphique sur toute la vue de la caméra. Pour la photo que vous avez fournie, j'essaierais une couleur brune.
Cela a été utilisé dans un jeu d'horreur appelé Drea D Out. Si le joueur s'approchait d'un fantôme, l'écran deviendrait brumeux. Bien qu'il n'ait pas été utilisé sous l'eau, il a eu un effet similaire :)
Vous pouvez toujours choisir les deux méthodes ou créer un shader qui changerait la couleur.
la source