Jak uniknąć „podwodnego wzroku” w grach

19

W wielu grach, w których gracz może zanurzyć się pod wodą, wydaje się, że kiedy patrzysz w górę, w górnej części ekranu, a dolna połowa ekranu znajduje się w wodzie, to prawie tak, jakby woda nie istniała, a gracz ... lata powoli z dźwiękami wody?

wprowadź opis zdjęcia tutaj

Czy istnieje logiczny sposób na rozwiązanie tego problemu? Algorytm? Nie wydaje się, aby pojawiło się jeszcze jakieś rozwiązanie, ponieważ wiele gier wciąż ma takie rozwiązanie. Nie chcę popełnić tego samego błędu.

LiquidFeline
źródło
4
Nowoczesne gry mają shadery, które są różne dla nad i pod wodą. Obecnie zdecydowanie tak nie wygląda. Wierzę, że Crysis ma dość zaawansowane renderowanie podwodne: youtube.com/watch?v=yXxEZJdFjeM
MartinTeeVarga
9
@ sm4: Myślę, że ta gra ma również tę funkcję. Problem polega jednak na tym, że aparat nie roni wody, jest nad nią, a ty widzisz poniżej z powodu zbliżenia.
Kikaimaru
@Kikaimaru Rozumiem, nie do końca zrozumiałem pytanie. Jednak Crysis nie wydaje się mieć tego problemu.
MartinTeeVarga
2
Aww, ale jak inaczej mam sprawdzić, czy na dnie rzeki są perły? (Elder Scrolls Oblivion): D
Singular1ty
1
Może mógłbyś sprawdzić, czy postać „głowa” znajduje się pod wodą zamiast kamery i nie dopuścić do zejścia się kamery, chyba że postać jest również pod wodą
Luke B.

Odpowiedzi:

16

A może po prostu nie dopuścić do takiej sytuacji?

Nie wiem, jak tworzysz swoją grę, ale jeśli wykryjesz, że widok będzie częściowo podwodny, możesz zmusić kamerę do umieszczenia nad wodą i tylko wtedy, gdy cały widok będzie pod wodą, możesz przełączyć się na widok pod wodą.

W zależności od tego, jak to robisz, może to oznaczać dodatkowe opóźnienie od momentu, w którym zaczniesz nurkować i kiedy faktycznie zobaczysz scenę spod powierzchni. To może być dobra rzecz z punktu widzenia UX, więc nie krępuj się eksperymentować.

W osobnej, ale pokrewnej notatce, zastanawiam się, dlaczego większość podwodnych scen jest renderowana krystalicznie czysto ... Jeśli kiedykolwiek zanurzysz głowę pod wodą, zauważysz, że twoje oczy nie są przeznaczone do widzenia pod wodą, a zatem wszystko wydaje się rozmyte. Musiałbyś nosić gogle, aby widzieć wyraźnie pod wodą.

A ponadto rzeczy wyglądają (i słyszą) zupełnie inaczej pod wodą niż nad wodą. Woda pochłania światło znacznie szybciej niż powietrze, więc im dalej światło podróżuje, tym mniej światła dociera do twoich oczu. Oznacza to, że im głębiej schodzisz, tym bardziej niebieskie są rzeczy (czerwone światło ma mniej energii i dlatego jest łatwiej absorbowane niż światło niebieskie). W rzeczywistości na zaledwie 12 metrach pod wodą krew wygląda na czarną, a nie czerwoną.

Nie widziałem jeszcze niespecjalistycznej gry, która nawet próbuje uzyskać właściwe podwodne środowisko ...

Panda Piżama
źródło
5
Wiele gier zmienia światło i dźwięk pod wodą. Zobacz wideo Crysis połączone w komentarzach powyżej. Jestem pewien, że nie jest to w pełni realistyczne, ale (a) większość ludzi nie ma bezpośredniego doświadczenia z głębokimi podwodnymi środowiskami i (b) w grach, w których zanurzasz się pod wodą, prawdopodobnie musisz widzieć, aby grać w grę .
Nathan Reed
Wierzę, że większość gier nie robi tego po prostu dlatego, że nikt nie chciałby zanurzyć się pod wodą, jeśli niczego tam nie zobaczy. A może wszyscy główni bohaterowie gry zostali przeszkoleni przez ludzi Moken! news.nationalgeographic.com/news/2004/05/…
MartinTeeVarga
1
W rozwoju gier tego rodzaju „doktorze, to boli, kiedy to robię”, rozwiązanie jest zwykle optymalne.
Trevor Powell,
1
@TrevorPowell: Czytam twój komentarz kilkanaście razy i nadal nie rozumiem twojego zdania. Może chciałbyś to rozwinąć?
Panda Pajama
2
Przeprosiny! Jest to nawiązanie do starego dowcipu o wodewilach . Żart brzmi mniej więcej tak: Pacjent: „Doktorze, boli mnie, kiedy to robię!”. Lekarz: „Nie rób tego!” Chciałem tylko powiedzieć, że w grach często najprostszym sposobem rozwiązania problemu jest zatrzymanie gry w stanie, w którym problem musi zostać rozwiązany. (np .: najłatwiejszym sposobem na naprawienie „grafiki wyglądają źle, gdy płaszczyzna zbliżenia przecina powierzchnię wody” to „nie pozwól płaszczyźnie zbliżenia przycięcia przeciąć powierzchnię wody”)
Trevor Powell
7

Problem, o którym mówisz, dotyczy przecinania się widoku kamery przez płaszczyznę wody; typowe „podwodne efekty” są wykonywane za pomocą pełnoekranowych efektów postprocesowych i nie wyglądałyby poprawnie, gdyby widok został przycięty w ten sposób (byłby to po prostu odwrotny problem).

Nawet jeśli z trudem wykrywasz skrzynkę przycinającą (potencjalnie trudną) i podcinasz lub przycinasz efekt podwodnego widoku pełnoekranowego, tak aby zastosował się on tylko do sceny podwodnej (co jest potencjalnym rozwiązaniem, które możesz zbadać), nadal masz problem samej faktycznej płaszczyzny wodnej. Przejście tam nadal byłoby niepokojącym artefaktem wizualnym. Możesz wykryć ten samolot i mocno go rozmazać; jest to prawdopodobnie najbliższa rzeczywistej analogii tego, co może być oglądane przez częściowo zanurzony obiektyw aparatu.

Alternatywnie, zapobiegaj temu całkowicie: nie pozwól, aby kamera schodziła poniżej płaszczyzny wodnej, jeśli odtwarzacz znajduje się „nad” wodą lub powyżej płaszczyzny wodnej, gdy gracz znajduje się „pod” wodą. Działa to naprawdę tylko wtedy, gdy masz tryby pracy dyskretnego odtwarzacza nad / pod wodą i działa najlepiej, jeśli istnieje fizyczny przycisk lub inna wyraźna i oczywista czynność, którą gracz może podjąć, aby przejść między „pływaniem na powierzchni” i „pływaniem pod wodą” powierzchnia."

Zamiast wyraźnego naciśnięcia klawisza podczas nurkowania można interpretować ruch do przodu, gdy kamera jest nachylona na tyle, aby oznaczać „nurkowanie”. Następnie można użyć efektu graficznego (rozbryzgi lub cokolwiek innego), aby ukryć przejście kamery przez płaszczyznę wody, którego normalnie nie byłby w stanie przekroczyć.

W Guild Wars 2 zastosowaliśmy taką technikę.


źródło
3

Gry zwykle włączają jakieś efekty, głównie niebieską mgłę, gdy kamera znajduje się pod wodą. Aby poradzić sobie z sytuacją, w której bliska płaszczyzna przecina się przez powierzchnię wody, można włączyć moduł cieniujący, gdy kamera zbliży się do powierzchni wody, ale następnie dodać kod do modułu cieniującego piksele, który oblicza punkt na bliskiej płaszczyźnie odpowiadający ten piksel i aktywuje mgłę tylko wtedy, gdy ten punkt znajduje się pod powierzchnią wody.

Jeśli mgła jest wykonywana jako postproces, przez renderowanie przejścia pełnoekranowego, jest to szczególnie łatwe - wystarczy obliczyć pozycję w przestrzeni kosmicznej każdego wierzchołka pełnoekranowego kwadratu lub trójkąta na najbliższej płaszczyźnie (z odwrotnością view / projection matrix) i interpoluj tę wartość aż do modułu cieniującego piksele; następnie możesz sprawdzić jego pionowy komponent i sprawdzić, czy znajduje się powyżej lub poniżej płaszczyzny wody.

Aby uzyskać punkty bonusowe, możesz użyć tej samej techniki, aby dodać teksturę o grubości kilku pikseli, która będzie reprezentować menisk na powierzchni wody, dzięki czemu nie będzie wyglądać tak ostro.

Nathan Reed
źródło
(ma problemy, jeśli powierzchnia wody jest siatką, ale nadal świetną ogólną odpowiedzią)
Czy
0

Mam dwie metody; Jeden używa modułu cieniującego, drugi może korzystać z GUI. Oba zaczną się tak samo:

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

Shader da więcej realizmu, możesz zastosować zniekształcenie takie jak to

Fog Like Com. Chłopak stwierdził, że można go zastosować poprzez GUI. Utwórz zdjęcie z częściową przezroczystością i użyj go jako GUI w całym widoku kamery. Dla dostarczonego zdjęcia spróbowałbym brązowego koloru.

Zostało to wykorzystane w horrorze o nazwie Drea D Out. Gdyby gracz zbliżył się do ducha, ekran stałby się mglisty. Chociaż nie był używany pod wodą, dał podobny efekt :)

Zawsze możesz wybrać obie metody lub utworzyć moduł cieniujący, który zmieniłby kolor.

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

Taken from : http://sahdan-share.blogspot.com/2013/04/dreadout.html
Mikołaj Marcisz
źródło