Магия шейдеров 20: Идеи для шейдера дождя и брызг

Как сделать такой дождь? Идея реализации без системы частиц.

Магия шейдеров 20: Идеи для шейдера дождя и брызг Shadermagic, Coremission, Шейдеры, Магияшейдеров, Гифка, Эффект, Визуальные эффекты, 3D, Видео

Прежде всего разберемся подойдут ли нам стандартные частицы из движка? Некоторые движки позволяют делать такие частицы, которые проверяют коллизии, и, например, вы сможете получить дождь, который не будет капать сквозь крышу. Как это реализовано? Будет ли это работать быстро? Нужно проверять.

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

Но как учесть крыши и другие горизонтальные поверхности?

Капли не должны пролетать сквозь поверхности, и чтобы этого добиться —можно сделать аналог shadowmap, получить глубину сверху и в шейдере проверять «а есть ли что-то над каплей?» и если есть – делаем по-аналогии с тем как, например, работает mesh-flipbook —не рисуем каплю вообще (про mesh flip-book я рассказывал в докладе Магия шейдеров, ссылка с таймкодом)

Поправьте меня, если я что-то упускаю, но этот подход легко применяется и для шейдера материала брызг,— рисуем брызги прямо на поверхности. Для них можем использовать и частицы - у нас есть обычный emitter частиц для брызг и мы в шейдере для материала этих брызг сэмплируем эту "глубину сверху" и сдвигаем капли вниз.

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

Преломление света

Ну и преломление света сквозь капельки, реализуется стандартно: в нашем пайплайне у нас будет предыдущий кадр с mip-уровнями, рассчитанными так же как для Bloom (очень популярный эффект про который множество статей) его то мы и будем сэмплировать в шейдере материала капель.

p.s. Ребята, да, я вижу ваши жалобы, что ничего непонятно без кода. Но я не пришел сюда учить. Я пришел показать идею, которую можно сделать. Для тех, кто разбирается в шейдерах хотя бы немного, мне кажется,— легко представить как подобное реализовать. Если никто не реализует — может быть я смогу сделать доклад для какой-то из конференций в этом году и расскажу про этот эффект подробнее, но видео-уроки делать я точно не буду.

Всем гектаров в имениях и легкости в движениях!

Смотрите остальные посты про магию шейдеров по тегам ниже.

Лига Разработчиков Видеоигр

6.6K постов22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

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

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"