So verhindern Sie "Unterwassersicht" in Spielen

19

In vielen Spielen, in denen der Spieler unter Wasser gehen kann, sieht es so aus, als ob sich die obere Hälfte des Bildschirms in der Luft befindet und die untere Hälfte des Bildschirms im Wasser. Es ist fast so, als ob das Wasser nicht existiert Spieler fliegt langsam mit Wassergeräuschen?

Bildbeschreibung hier eingeben

Gibt es einen logischen Weg, dies zu lösen? Ein Algorithmus? Es scheint, dass noch keine Lösung gefunden wurde, da dies in vielen Spielen immer noch der Fall ist. Ich möchte nicht den gleichen Fehler machen.

LiquidFeline
quelle
4
Moderne Spiele haben Shader, die sich über und unter Wasser unterscheiden. Das sieht heutzutage definitiv nicht mehr so ​​aus. Ich glaube, Crysis hat ein ziemlich fortgeschrittenes Unterwasser-Rendering: youtube.com/watch?v=yXxEZJdFjeM
MartinTeeVarga
9
@ sm4: Ich denke, dieses Spiel hat auch dieses Feature. Aber das Problem ist, dass die Kamera nicht unter dem Wasser ist, sondern über dem Wasser, und dass Sie wegen des nahen Clippings unten sehen können.
Kikaimaru
@Kikaimaru Ich verstehe, ich habe die Frage nicht ganz verstanden. Crysis scheint dieses Problem jedoch nicht zu haben.
MartinTeeVarga
2
Aww, aber wie soll ich sonst sehen, ob es am Grund des Flusses Perlen gibt? (Elder Scrolls Oblivion): D
Singular1ty
1
Vielleicht können Sie überprüfen, ob der Charakter "Kopf" unter Wasser ist und nicht die Kamera unter Wasser lassen, es sei denn, der Charakter ist auch unter Wasser
Luke B.

Antworten:

16

Wie wäre es einfach, diese Situation nicht zuzulassen?

Ich weiß nicht, wie du dein Spiel machst, aber wenn du feststellst, dass die Ansicht teilweise unter Wasser ist, kannst du die Kamera zwingen, über Wasser zu sein, und nur wenn die gesamte Ansicht unter Wasser wäre, kannst du zu wechseln Unterwasseransicht.

Je nachdem, wie Sie es machen, kann es zu einer zusätzlichen Verzögerung kommen, wenn Sie mit dem Tauchen beginnen und die Szene tatsächlich unter der Oberfläche betrachten. Unter UX-Gesichtspunkten ist dies möglicherweise eine gute Sache. Sie können also gerne experimentieren.

Ich frage mich, warum die meisten Unterwasserszenen kristallklar sind. Wenn Sie Ihren Kopf jemals unter Wasser halten, werden Sie feststellen, dass Ihre Augen nicht für Unterwassersicht entwickelt wurden und daher alles verschwommen erscheint. Sie müssten eine Schutzbrille tragen, um unter Wasser klar zu sehen.

Und außerdem sehen (und hören) die Dinge unter Wasser ganz anders aus als über Wasser. Wasser absorbiert das Licht viel schneller als Luft. Je weiter das Licht fließt, desto weniger Licht gelangt in Ihre Augen. Dies bedeutet, je tiefer Sie gehen, desto blauer wirken die Dinge (rotes Licht hat weniger Energie und wird daher leichter absorbiert als blaues Licht). Tatsächlich sieht Blut in einer Entfernung von nur 12 Metern unter Wasser schwarz und nicht rot aus.

Ich habe noch kein nicht spezialisiertes Spiel gesehen, das sogar versucht, Unterwasserumgebungen in Ordnung zu bringen ...

Panda-Pyjama
quelle
5
Viele Spiele verändern das Licht und den Klang unter Wasser. Siehe das in den Kommentaren oben verlinkte Crysis-Video. Ich bin sicher, es ist nicht perfekt realistisch, aber (a) die meisten Leute haben keine direkte Erfahrung mit tiefen Unterwasserumgebungen und (b) in Spielen, in denen Sie unter Wasser gehen, müssen Sie vermutlich in der Lage sein, das Spiel zu sehen, zu spielen .
Nathan Reed
Ich glaube, die meisten Spiele machen das nicht einfach, weil niemand unter Wasser gehen möchte, wenn er dort nichts sieht. Oder vielleicht wurden alle Hauptfiguren des Spiels von Moken trainiert! news.nationalgeographic.com/news/2004/05/…
MartinTeeVarga
1
In der Spieleentwicklung ist diese Art von "Doktor, es tut weh, wenn ich das tue" -Lösung normalerweise die optimale.
Trevor Powell
1
@ Trevor Powell: Ich habe Ihren Kommentar ein Dutzend Mal gelesen und verstehe Ihren Standpunkt immer noch nicht. Vielleicht möchten Sie näher darauf eingehen?
Panda Pyjama
2
Entschuldigung! Es ist ein Hinweis auf einen alten Varieté-Witz . Der Witz geht ungefähr so: Patient: "Doktor, es tut weh, wenn ich das tue!". Arzt: "Do not tut das!" Ich wollte damit nur sagen, dass in Spielen der einfachste Weg, ein Problem zu lösen, darin besteht, das Spiel daran zu hindern, in einen Zustand zu geraten, in dem das Problem gelöst werden muss. (ZB: Die einfachste Möglichkeit, um zu beheben, dass "die Grafiken falsch aussehen, wenn die Ebene in der Nähe des Clips die Wasseroberfläche schneidet", besteht darin, dass die Ebene in der Nähe des Clips die Wasseroberfläche nicht schneidet.)
Trevor Powell,
7

Das Problem, auf das Sie sich beziehen, hängt mit dem Bildvolumen der Kamera zusammen, das durch das Wasserflugzeug abgeschnitten wird. Typische "Unterwassereffekte" werden über Post-Process-Effekte im Vollbildmodus erzeugt und sehen nicht richtig aus, wenn die Ansicht wie folgt beschnitten wird (dies wäre genau das Gegenteil).

Selbst wenn Sie sich die Mühe machen, den Clipping-Fall (möglicherweise schwierig) zu erkennen und den ansonsten im Vollbildmodus angezeigten Unterwassereffekt so zu scheren oder zu beschneiden, dass er nur auf die Unterwasserszene angewendet wird (eine mögliche Lösung, die Sie untersuchen könnten), haben Sie immer noch die Problem des tatsächlichen Wasserflugzeugs selbst. Der Übergang dorthin würde immer noch ein erschütterndes visuelles Artefakt sein. Sie könnten dieses Flugzeug erkennen und es stark verwischen. Dies ist wahrscheinlich die beste Annäherung, die Sie an eine reale Analogie der Ansicht durch ein teilweise untergetauchtes Kameraobjektiv erreichen können.

Alternativ können Sie verhindern, dass dies vollständig geschieht: Lassen Sie die Kamera nicht unter das Wasserflugzeug fahren, wenn sich der Spieler "über" dem Wasser befindet, oder über dem Wasserflugzeug, wenn sich der Spieler "unter" dem Wasser befindet. Dies funktioniert nur dann wirklich, wenn Sie diskrete Spielerbetriebsarten für Über- / Unterwasser haben. Dies funktioniert am besten, wenn es eine physische Taste oder eine andere eindeutige Aktion gibt, die der Spieler ausführen kann, um zwischen "Schwimmen auf der Oberfläche" und "Schwimmen unter Wasser" zu wechseln die Oberfläche."

Anstelle eines expliziten Tastendrucks zum Tauchen können Sie Vorwärtsbewegungen interpretieren, während die Kamera so weit nach unten geneigt ist, dass "Tauchen" gemeint ist. Sie können dann einen grafischen Effekt (Spritzer oder was auch immer) verwenden, um den Übergang der Kamera durch die Wasserebene zu verbergen, den sie normalerweise nicht überqueren könnte.

In Guild Wars 2 haben wir eine solche Technik angewendet.


quelle
3

Bei Spielen werden normalerweise bestimmte Effekte aktiviert, vor allem blauer Nebel, wenn sich die Kamera unter Wasser befindet. Um die Situation zu bewältigen, in der die nahe Ebene durch die Wasseroberfläche schneidet, können Sie den Nebel-Shader aktivieren, wenn sich die Kamera der Wasseroberfläche nähert. Fügen Sie dann dem Pixel-Shader einen Code hinzu, der den Punkt auf der nahen Ebene berechnet, der entspricht Dieses Pixel aktiviert den Nebel nur, wenn sich dieser Punkt unter der Wasseroberfläche befindet.

Wenn Nebel als Nachbearbeitung durchgeführt wird, indem ein Vollbilddurchgang gerendert wird, ist dies besonders einfach: Sie müssen lediglich die Weltraumposition jedes Scheitelpunkts des Vollbild-Quadrats oder -Dreiecks in der nahen Ebene (mit der Umkehrung) berechnen Ansicht / Projektionsmatrix) und interpolieren Sie diesen Wert bis zum Pixel-Shader. Dann können Sie die vertikale Komponente überprüfen und feststellen, ob sie sich über oder unter der Wasserfläche befindet.

Für Bonuspunkte können Sie dieselbe Technik verwenden, um eine einige Pixel dicke Textur hinzuzufügen, um den Meniskus an der Wasseroberfläche darzustellen , sodass er nicht so stark wie eine scharfe Linie aussieht.

Nathan Reed
quelle
(hat Probleme, wenn die Wasseroberfläche eine Masche ist, aber immer noch eine gute allgemeine Antwort)
Will
0

Ich habe zwei Methoden; Einer verwendet einen Shader, der andere könnte eine GUI verwenden. Beide starten gleich:

"Vereinfacht" - If, Object(Camera) is in 3d Space(Water bounding box/whatever you choose) trigger a shader/GUI.

Shader gibt mehr Realismus, Sie können eine Verzerrung wie diese anwenden

Nebel wie Com. Junge sagte, kann über die GUI angewendet werden. Erstellen Sie ein Foto mit teilweiser Transparenz und verwenden Sie es als GUI für die gesamte Kameraansicht. Für das von Ihnen gelieferte Foto würde ich eine braune Farbe versuchen.

Dies wurde in einem Horrorspiel namens Drea D Out verwendet. Näherte sich der Spieler einem Geist, wurde der Bildschirm neblig. Obwohl es nicht unter Wasser verwendet wurde, ergab es einen ähnlichen Effekt :)

Sie können immer beide Methoden auswählen oder einen Shader erstellen, der die Farbe ändert.

http://media.indiedb.com/images/games/1/21/20833/Demo_update_SS01.png

Taken from : http://sahdan-share.blogspot.com/2013/04/dreadout.html
Mikolaj Marcisz
quelle