Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Как убрать туман внутри помещений?

Как убрать туман внутри помещений?

Страницы: 1 2 3 Следующая »
MSA2Пользовательwww13 окт. 20181:25#0
Всем привет!

Возник ещё один вопрос по туману.
Вот тут на картинке я заскриншотил ракурс, который
позволяет увидеть улицу и зал банка одновременно
(влево уходит тротуар, справа стол внутри помещения):

+ Показать

Плотность тумана для открытых пространств (улиц, парков и т.д.)
я настроил идеально - перспектива постепенно растворяется в тумане.
Поскольку туман в буфере просчитывается во всех направлениях,
аналогично в нём растворяются и внутренности помещений, что
выглядит довольно странно..

Не могу сообразить каким образом можно "отключить" туман
в ограниченных объёмах, или - ещё проще - менять его интенсивность.
Совсем недавно рассматривал нюансы реализации The Last Of Us,
так вот, там туман от дымовых гранат так же не разбирает где он находится.

Вопрос к бывалым: есть ли какие то готовые решения, или тут нужен спец-шейдер?
И что вообще можно предпринять для удаления такого как бы косяка?

Заранее спасибо!

Правка: 13 окт. 2018 10:45

Great V.Постоялецwww13 окт. 20181:42#1
MSA2
> Вот тут на картинке я заскриншотил
Негры ночью грузят уголь.

> Не могу сообразить каким образом можно "отключить" туман
Рисуй туман не на весь экран, т.е. не через пост-обработку.
Можно, например, применять его к внешним объектам, но не к внутренним.

SuslikМодераторwww13 окт. 20184:57#2
MSA2
> Вот тут на картинке я заскриншотил ракурс, который
> позволяет увидеть улицу и зал банка одновременно
малевич, залогиньтесь.
*Lain*Постоялецwww13 окт. 201813:17#3
MSA2
туман выключи. рейкасти в шейдере полноэкраннной обработки (трассируй первичные лучи из каждой точки экрана). То есть классифицируй каждую точку на экране. Если точка принадлежит помещению и помещение близко, то можешь проводить другую пост обработку для данной точки: например без тумана. Кстати будет выглядеть очень зловеще из далека, если на близость помещения не проверять, перед убиранием тумана.

Правка: 13 окт. 2018 13:21

*Lain*Постоялецwww13 окт. 201813:19#4
Great V.
> Негры ночью грузят уголь.
Ну есть такой прием: Рисуй хоррор, если ты не можешь в триде или ты инди. Все правильно делает. Вероятно у него хоррор

Правка: 13 окт. 2018 13:21

MSA2Пользовательwww13 окт. 201813:33#5
*Lain*
> туман выключи. рейкасти в шейдере полноэкраннной обработки (трассируй первичные лучи из каждой точки экрана). То есть классифицируй каждую точку на экране. Если точка принадлежит помещению и помещение близко, то можешь проводить другую пост обработку для данной точки: например без тумана. Кстати будет выглядеть очень зловеще из далека, если на близость помещения не проверять, перед убиранием тумана.
Не совсем понимаю как это сделать - не силён в деталях и тонкостях API опенджиэл и видеокарты.
Как бы представляю о чём вы говорите, но о деталях не в курсе.
Насколько сложно реализовать такую тему вообще?
В данном случае включен глобальный туман и никаких лишних телодвижений не требуется.
Много ли ресурсов может потребовать такая детальная обработка тумана? Приблизительно.
Речь идёт о ПК, возможно когда-нибудь консоли, гипотетически, но никаких мобайлов не планирую.

p.s.
Да, делаю хоррор. Это имхо единственное, что можно достойно реализовать
одному человеку, с точечным подключением сторонних специалистов.
Акцент на сюжете и атмосфере, поэтому туману и вообще визуалу приходится
уделять особое внимание. Выглядеть как ААА не получится, но Брейн
или Шиморо должны быть довольны.

Правка: 13 окт. 2018 13:41

mr.DIMASПостоялецwww13 окт. 201814:44#6
MSA2
Если у тебя туман рисуется постобработкой то пойдет то что написал *Lain*, если каждый объект рисуется своим шейдером, то тут все просто - достаточно убрать из шейдера для внутренних помещений затуманивание пикселей.

Ну и чуток оффтопа. Настраивай интенсивность освещения в игре при 30% яркости монитора (или даже ниже), иначе ты рискуешь сделать непроглядную темноту. Однако если нужна настоящая темнота, оставляй световые ориентиры на уровне - всякие мелкие лампочки и прочие светящиеся предметы - так глазу будет за что зацепиться и игрок не потеряется в темноте.

MSA2Пользовательwww13 окт. 201815:09#7
mr.DIMAS
> Если у тебя туман рисуется постобработкой то пойдет то что написал *Lain*, если
> каждый объект рисуется своим шейдером, то тут все просто - достаточно убрать из
> шейдера для внутренних помещений затуманивание пикселей.

Так, это уже понятней. Я разрабатываю игру в Unity и юзаю metallic воркфлоу,
как самое экономичное. На данный момент использую стандартные шейдеры
(хотя планирую купить шейдеры Marmoset), настройки которых выглядят так:

+ Показать

и здесь нет никаких настроек, связанных с туманом.
Нет и подходящих переменных в "редактировании шейдера":
+ Показать


Вообще настройки тумана имеются лишь во вкладке Lighting
и в профиле пост-обработки, но там у меня всё отключено.
Т.е. мне необходимо модифицировать стандартный шейдер?

> Ну и чуток оффтопа. Настраивай интенсивность освещения в игре при 30% яркости
> монитора (или даже ниже), иначе ты рискуешь сделать непроглядную темноту.
> Однако если нужна настоящая темнота, оставляй световые ориентиры на уровне -
> всякие мелкие лампочки и прочие светящиеся предметы - так глазу будет за что
> зацепиться и игрок не потеряется в темноте.
На моём древнем IPS-мониторе в полноэкранном режиме отображает отличный
густой туман, в котором без проблем можно ориентироваться, но нельзя найти
предметы, которые без фонаря еле различимы. Это часть механики.
Здесь на форуме белый фон, поэтому на контрасте скриншот кажется очень тёмным.
Я позже сделаю настройки для регулировки гаммы для комфортного отображения
на обычных мониторах.

Спасибо за подсказки!

Правка: 13 окт. 2018 15:16

mr.DIMASПостоялецwww13 окт. 201815:32#8
Без понятия как стандартный туман настраивается в юнити, однако написать свой шейдер тумана довольно просто, достаточно модифицировать цвет пикселя в зависимости от расстояния от камеры до пикселя. Этот шейдер можно применить вторым проходом поверх отрендеренного первого стандартным шейдером.
innuendoПостоялецwww13 окт. 201815:38#9
some kind of stencil ?
g-contПостоялецwww13 окт. 201817:17#10
Надо придумать какой-то маркер для индора и аутдора. Если полигоны в аутдоре - туманим и наоборот. Но навряд ли получится это сделать автоматически.
ronnikoПостоялецwww13 окт. 201818:24#11
Можно здание в боунд бокс. Что бы по нему узнать когда игрок будет в здании.
И если игрок в этом боксе, то не выводить\ не рендерить туман.
mr.DIMASПостоялецwww13 окт. 201818:33#12
ronniko
> И если игрок в этом боксе, то не выводить\ не рендерить туман.
Тогда туман снаружи здания тоже пропадет.
Fantom09Постоялецwww13 окт. 201818:49#13
А в чем проблема? почему в помещении с открытыми окнами и дверями не может быть тумана?
И почему, если смотреть из тумана в комнату где "нет тумана",  "кусок" тумана от улицы до комнаты должен исчезнуть?

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

Ну и естественно "маркеры", если уж сильно хочется. Первое что пришло на ум - сделать виртуальные "заглушки" для окон и дверей, такие себе окклюдеры для тумана. Тоесть просто квад по размеру двери/окна, который будет рендериться только в буфер глубины (запись в буфер цвета отключена или альфа = 0), таким образом туман с улицы будет считаться только до этого квада, а за счет куллинга задних граней этого окклюдера - изнутри помещения туман на улице будет выглядеть нормальным.  Сделать чтоб внутри помещения не было тумана - задачка в разы сложнее, потому тут проще поиграться функцией тумана, возможно клэмпить ее, если расстояние до камеры меньше скольких-то метров.

Правка: 13 окт. 2018 18:50

ronnikoПостоялецwww13 окт. 201819:17#14
ТС ты определись ты mr.DIMAS или MSA2
Страницы: 1 2 3 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр