Как я могу создать объемный туман на основе высоты?

10

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

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

Таким образом, главный вопрос все еще остается - как я могу реализовать объемный туман, который одновременно и плотный, и эффективный?

В качестве конкретного движка, который я использую, это Unity.

В качестве примера, что я имею в виду, вот ссылка на игру с эффектом, который я ищу: Astromike

Пример скриншота из игры с использованием плотного тумана на основе высоты.

Candid Moon _Max_
источник
Немного нуба GLSL, но как насчет тонирования пикселей в фрагментном шейдере, основываясь на их координате Y, которую вы получите из вершинного шейдера?
Квентин
2
Вы просматривали доклад Unity о «Спецэффектах с глубиной» ? Хотя ему уже несколько лет, принципы все еще применяются. Они охватывают как основанный на высоте туман, так и «пушистый туман», который объединяется в пустых пространствах и разжижается вокруг препятствий, и, поскольку все примеры представляют собой Unity, его следует легко применять.
DMGregory
@Quentin, да, хорошая идея, хотя будет ли шейдер для каждого объекта, верно? Тогда это потребует изменения большого количества шейдеров. Я тоже новичок в шейдерном программировании, так что я мог бы написать какую-то ерунду. Но насколько я знаю, вершинные шейдеры применимы к объектам. А окраска может не дать эффекта движения. Я понимаю, что если я хочу двигаться, каждая мелочь, которая движется внутри, должна быть объектом, поэтому система частиц могла бы быть лучшим путем.
Candid Moon _Max_
@wondra Да, это может быть не лучшим подходом, если это правда, прозрачность сильно влияет на производительность.
Candid Moon _Max_
1
Списки также не подходят для нашего формата вопросов и ответов, потому что, когда список завершен? Сколько «разных ситуаций» достаточно? По каким показателям мы оцениваем «лучшие»? Обычно этот формат лучше всего подходит для четко сфокусированных вопросов с ответами, которые вы можете проверить. Поэтому, если вы чувствуете, что у вас есть ответ, который соответствует вашим потребностям, на самом деле лучше отредактировать свой вопрос, чтобы сначала сузить его до того, что вам действительно нужно, а не оставлять его слишком широким и не полностью отвеченным. Другие пользователи всегда могут задать другие вопросы, относящиеся к другим аспектам, получая более сфокусированные ответы, относящиеся к их делу
DMGregory

Ответы:

24

Я создатель Astromike. :)

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

Я настраиваю плоскость для тумана и добавляю материал, используя шейдер Particle / Alpha, смешанный с фактором мягких частиц (0.32 в моем случае). Вот и все.

Противотуманная плоскость: http://imgur.com/a/MAEFW

Настройки: http://imgur.com/NJVAaIQ

Это работает для меня из-за угла камеры и может не работать для других людей.

Остальное - просто стэк с постэффектом (Bloom, Vignette и т. Д.). Надеюсь, это поможет. Приветствия.

Mikea15
источник
1
Вот Это Да! Круто, спасибо, что поделились! Игра потрясающая :)
Candid Moon _Max_
Выглядит потрясающе и так просто, попробовал сделать это в моем проекте. Кажется, работает только с использованием перспективной камеры (наша игра орфографическая).
Джефф
это слишком хорошо, чтобы быть правдой, ха-ха, приятно
Лестат
Привет @ Mikea15, очень красивая игра! К сожалению, я не могу воссоздать эффект, который вы упомянули - я добавил Bloom в стек постобработки, однако он распространяется на объекты, даже если за ними находится плоскость тумана (что неудивительно), тогда как в вашей демонстрации кажется, что вертикальные края колонны чисты от эффекта цветения. Также в моем Soft Particle Factor ничего не меняется, независимо от значения. Было бы здорово, если бы вы могли предоставить небольшую демонстрационную сцену, которая показала бы это. Спасибо!
Давид
@ Давид, я знаю, что уже поздно, но вам нужно установить путь рендеринга камеры с задержкой и убедиться, что мягкие частицы проверяются на качество в настройках проекта
Рито Рамос