Как предотвратить «подводное зрение» в играх

19

Во многих играх, где игрок может уйти под воду, кажется, что когда вы смотрите, где верхняя половина экрана находится в воздухе, а нижняя половина экрана находится в воде, это почти как вода, которой не существует, и игрок ... летит медленно со звуками воды?

введите описание изображения здесь

Есть ли логический способ решить это? Алгоритм? Похоже, что пока не найдено никакого решения, так как во многих играх это все еще есть. Я не хочу делать ту же ошибку.

LiquidFeline
источник
4
В современных играх есть шейдеры, которые различаются как над, так и под водой. Это определенно не выглядит так в наши дни. Я считаю, что Crysis обладает довольно продвинутым рендерингом под водой: youtube.com/watch?v=yXxEZJdFjeM
MartinTeeVarga
9
@ sm4: я думаю, что эта игра тоже имеет эту функцию. Но проблема в том, что камера не ниже воды, она выше, и вы можете видеть ниже из-за почти отсечения.
Кикаймару
@ Кикаймару Понятно, я не совсем понял вопрос. Однако Crysis, похоже, не имеет этой проблемы.
MartinTeeVarga
2
Оу, а как еще мне посмотреть, есть ли жемчужины на дне реки? (Elder Scrolls Oblivion): D
Singular1ty
1
Возможно, вы могли бы проверить, находится ли «голова» персонажа под водой вместо камеры, и не позволить камере уйти под воду, если персонаж также не под водой
Люк Б.

Ответы:

16

Как насчет просто не допустить эту ситуацию?

Я не знаю, как вы делаете свою игру, но если вы обнаружите, что вид будет частично под водой, вы можете заставить камеру находиться над водой, и только когда весь вид будет под водой, вы можете переключиться на подводный вид.

В зависимости от того, как вы это делаете, это может означать, что есть дополнительная задержка с момента, когда вы начинаете погружение, и когда вы фактически просматриваете сцену из-под поверхности. На самом деле это может быть хорошо с точки зрения UX, поэтому не стесняйтесь экспериментировать.

В отдельном, но связанном примечании, мне интересно, почему большинство подводных сцен становятся кристально чистыми ... Если вы когда-нибудь положите голову под воду, вы заметите, что ваши глаза не предназначены для подводного зрения, и поэтому все кажется размытым. Вы должны быть в очках, чтобы на самом деле ясно видеть под водой.

Кроме того, под водой все выглядит (и слышно) совсем иначе, чем над водой. Вода поглощает свет намного быстрее, чем воздух, поэтому, чем дальше свет распространяется, тем меньше света попадет в ваши глаза. Это означает, что чем глубже вы идете, тем более голубые вещи выглядят (красный свет имеет меньше энергии и поэтому поглощается легче, чем синий). На самом деле, на глубине всего 12 метров под водой кровь выглядит черной, а не красной.

Я еще не видел неспециализированную игру, которая даже пытается получить правильную подводную среду ...

Панда Пижама
источник
5
Многие игры меняют свет и звук под водой. Смотрите видео Crysis по ссылке в комментариях выше. Я уверен, что это не совсем реалистично, но (а) большинство людей не имеют непосредственного опыта в глубокой подводной среде и (б) в играх, в которых вы погружаетесь под воду, вы, вероятно, должны иметь возможность видеть, чтобы играть в игру. ,
Натан Рид
Я полагаю, что большинство игр не делают этого просто потому, что никто не хотел бы идти под водой, если они ничего не видят там. Или, может быть, все главные герои игры были обучены Moken людьми! news.nationalgeographic.com/news/2004/05/…
MartinTeeVarga
1
В разработке игр, такого рода «доктор, больно, когда я делаю это», решение обычно является оптимальным.
Тревор Пауэлл
1
@TrevorPowell: я прочитал твой комментарий дюжину раз, и я все еще не понимаю твою точку зрения. Может быть, вы хотели бы уточнить?
Панда Пижама
2
Извиняюсь! Это отсылка к старой шутке водевиля . Шутка звучит примерно так: Пациент: «Доктор, мне больно, когда я так поступаю!». Доктор: "Не делай этого!" Я просто хотел сказать, что в играх часто самый простой способ решить проблему - не дать игре войти в состояние, в котором проблема должна быть решена. (например: самый простой способ исправить «графика выглядит неправильно, когда плоскость ближнего зажима пересекает поверхность воды», это «не позволяйте плоскости ближнего зажима пересекать поверхность воды»)
Тревор Пауэлл,
7

Проблема, о которой вы говорите, связана с ограничением объема изображения камеры через плоскость воды; типичные «подводные эффекты» выполняются с помощью полноэкранных эффектов постобработки и не будут выглядеть правильно, если вид будет обрезан вот так (это будет просто противоположная проблема).

Даже если вы не решите обнаружить случай отсечения (потенциально трудный) и ножницами или обрезать другой полноэкранный подводный эффект, чтобы он применялся только к подводной сцене (это потенциальное решение, которое вы могли бы исследовать), у вас все равно будет Проблема самого водного самолета. Переход там по-прежнему будет резким визуальным артефактом. Вы можете обнаружить эту плоскость и сильно размыть ее; это, вероятно, самая близкая вы можете получить реальную аналогию того, что вид может быть через частично погруженный объектив камеры.

В качестве альтернативы, не допускайте, чтобы это происходило полностью: не позволяйте камере опускаться ниже уровня воды, если игрок находится «над» водой или над уровнем воды, когда игрок «ниже» воды. Это действительно будет работать, только если у вас есть отдельные режимы работы игрока над / под водой, и работает лучше всего, если есть физическая кнопка или другое четкое и очевидное действие, которое игрок может предпринять для перехода между «плаванием на поверхности» и «плаванием ниже» поверхность."

Вместо явного нажатия клавиши для погружения вы можете интерпретировать движение вперед, когда камера достаточно наклонена, чтобы означать «погружение». Затем вы можете использовать графический эффект (брызги или что-то еще), чтобы скрыть переход камеры через плоскость воды, которую она обычно не сможет пересечь.

Мы использовали такую ​​технику в Guild Wars 2.


источник
3

Игры обычно включают какие-то эффекты, в основном синий туман, когда камера находится под водой. Чтобы справиться с ситуацией, когда ближняя плоскость проходит через поверхность воды, вы можете включить туманный шейдер, когда камера приближается к поверхности воды, но затем добавить некоторый код в пиксельный шейдер, который вычисляет точку на ближней плоскости, соответствующую этот пиксель, и активирует туман, только если эта точка находится под поверхностью воды.

Если туман выполняется как постпроцесс, путем рендеринга полноэкранного прохода, это особенно легко - вам просто нужно вычислить положение в мировом пространстве каждой вершины полноэкранного четырехугольника или треугольника в ближней плоскости (с обратной матрица просмотра / проекции) и интерполировать это значение до пиксельного шейдера; затем вы можете проверить его вертикальную составляющую и посмотреть, находится ли он над или под плоскостью воды.

Для получения бонусных баллов вы можете использовать ту же технику, чтобы добавить текстуру толщиной в несколько пикселей для представления мениска на поверхности воды, чтобы она не выглядела как резкая линия.

Натан Рид
источник
(есть проблемы, если поверхность воды является сеткой, но все же отличный общий ответ)
Will
0

У меня есть два метода; Один использует шейдер, другой может использовать графический интерфейс. Оба начнут одинаково:

«Упрощенный» - If, Object(Camera) is in 3d Space(Water bounding box/whatever you choose) trigger a shader/GUI.

Шейдер даст больше реализма, вы можете применить искажение Like This

Туман, как ком. Мальчик заявил, может быть применен через графический интерфейс. Создайте фотографию с частичной прозрачностью и используйте ее в качестве графического интерфейса для всего вида камеры. Для фотографии, которую вы предоставили, я бы выбрал коричневый цвет.

Это было использовано в игре ужасов под названием Drea D Out. Если игрок приблизится к призраку, экран станет туманным. Хотя он не использовался под водой, он дал похожий эффект :)

Вы всегда можете выбрать оба метода или сделать шейдер, который бы изменил цвет.

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

Taken from : http://sahdan-share.blogspot.com/2013/04/dreadout.html
Миколай Марциш
источник