Магия шейдеров 20: Идеи для шейдера дождя и брызг
Как сделать такой дождь? Идея реализации без системы частиц.
Прежде всего разберемся подойдут ли нам стандартные частицы из движка? Некоторые движки позволяют делать такие частицы, которые проверяют коллизии, и, например, вы сможете получить дождь, который не будет капать сквозь крышу. Как это реализовано? Будет ли это работать быстро? Нужно проверять.
Я же знаю рендерское решение, опишу его: нам нужен, большой вершинный буфер, в котором мы будем хранить наш вершинный "суп" с растянутыми квадами, которые и будут каплями дождя. Можно сгенерировать их одной толщины и длины, и в случайном порядке подвигать по высоте, и чтобы получить дождь останется только сдвигать их вниз.
Но как учесть крыши и другие горизонтальные поверхности?
Капли не должны пролетать сквозь поверхности, и чтобы этого добиться —можно сделать аналог shadowmap, получить глубину сверху и в шейдере проверять «а есть ли что-то над каплей?» и если есть – делаем по-аналогии с тем как, например, работает mesh-flipbook —не рисуем каплю вообще (про mesh flip-book я рассказывал в докладе Магия шейдеров, ссылка с таймкодом)
Поправьте меня, если я что-то упускаю, но этот подход легко применяется и для шейдера материала брызг,— рисуем брызги прямо на поверхности. Для них можем использовать и частицы - у нас есть обычный emitter частиц для брызг и мы в шейдере для материала этих брызг сэмплируем эту "глубину сверху" и сдвигаем капли вниз.
Регулируем количество частиц брызг, регулируем количество капель и получаем: ливень или небольшой дождь.
Преломление света
Ну и преломление света сквозь капельки, реализуется стандартно: в нашем пайплайне у нас будет предыдущий кадр с mip-уровнями, рассчитанными так же как для Bloom (очень популярный эффект про который множество статей) его то мы и будем сэмплировать в шейдере материала капель.
p.s. Ребята, да, я вижу ваши жалобы, что ничего непонятно без кода. Но я не пришел сюда учить. Я пришел показать идею, которую можно сделать. Для тех, кто разбирается в шейдерах хотя бы немного, мне кажется,— легко представить как подобное реализовать. Если никто не реализует — может быть я смогу сделать доклад для какой-то из конференций в этом году и расскажу про этот эффект подробнее, но видео-уроки делать я точно не буду.
Всем гектаров в имениях и легкости в движениях!
Смотрите остальные посты про магию шейдеров по тегам ниже.