Нанитовый Ландшафт. Комплексный ландшафтный шейдер
Давайте рассмотрим некоторые методы к разработке ландшафта, которые я достаточно активно использую в своих проектах.
Полное представление материала:
Все параметры естественно выведены в экземпляр:
Несмотря на кажущуюся сложность такой материал является вполне логичным и интуитивно понятным.
Ландшафтный шейдер - это как правило, система слоев, каждый из которого представляет из себя полноценный подматериал со своим набором параметров:
Такие навороченные системы в большинстве случаев не обходятся без материальных функций.
А материальная функция - это по сути упакованный фрагмент логики материала и сделано это для удобства.
Таким образом следует определиться какие функции за что отвечают.
Если тезисно, то, как правило: в таких материалах есть набор материальных функций отвечающих за отдельно взятый слой материала:
Давайте посмотрим, что под капотом у такой функции:
- Управление тайлингом всего текстурного набора, реализующего конкретно данный слой
- Фактор Albedo или BaseColor
- Общий блик всего слоя, а не только в пределах текстуры
- Фактор Roughness, отвечающий за матовость слоя в материале
- Контактные тени (особенно актуально, если использовать нанитовую тесселяцию ландшафта доступную в версии движка UE 5.4)
- Естественно карты нормалей
- Классическая ситуация, когда карту высот используют не только для дисплейсмента, но и в качестве маски, по которой дальше при рисовании слоев эти самые слои будут смешиваться между собой при плавном переходе
- Собственно карта дисплейсмента для выдавливания ландшафта и придания реального объема поверхности.
К слову для дисплейсмента использую нанитовую тесселяцию:
Если фактор выдавливания слишком большой или его не достаточно, так это всегда можно подкрутить в настройках самого шейдера:
Помимо основных функций материальные функции конкретно в этом материале используются как маски смешения слоев между собой, а также и для более специфических функций.
В этом примере я создал метод дополнительный колористики для каждого из слоев в BaseColor атрибуте по процедурной цветовой маски, то есть вы можете для конкретного слоя применить колористику (тонировка, сатурация, тинтование цвета текстуры) по процедурной маске (т.е. пятнами).
Естественно функционал вы задаете сами, как и маску:
Здесь применяется единая цветовая RGB-маска, в каждом канале которой лежит своя отдельная маска, по каждой из которых задается рисунок колоризации.
Раскидано по 3 цветовым каналам:
Которые можно переключать в экземпляре:
Помимо таких функций, есть еще отдельно куча слоев с водой, отдельно функционал для воды (например, рябь). Также здесь реализована идея с дном под лужей.
То есть тонких нюансов конечно же хватает:
Однако есть и другие примеры ландшафтных материалов.
Такой материал в плане функций и возможностей намного богаче чем предыдущий пример, даже несмотря на то, что в нем отсутствует возможность ручной покраски по слоям.
Это автошейдер, который сам решает в каком месте какой слой применить и делает это весьма корректно. Еще бы.
Трудно представить, как бы запутанно он выглядел не примени я здесь возможность декларантов - ссылок на выходы функций.
Было бы безумие макаронной фабрики, в которой даже ее автор спустя какое-то время не разобрался бы сразу.
К слову этот материал применен на дальние горы:
В целом, таких систем существует огромное множество (да плюс еще одна) 🙂
Но все они строятся по единым законом мироздания, которые нужно понять.
Поймете как это, и любой шейдер соберете в итоге.
Мой подход заключается именно в этом. Понять философию или логику законов построения, что за что отвечает и дальше “дело в шляпе”.
Поэтому я готов вам с этим помогать, если конечно вы пожелаете…
ХОЧУ ПОЛУЧИТЬ ДОСТУП К МАТЕРИАЛАМ И СОЗДАТЬ ШЕЙДЕРЫ ДЛЯ СВОЕГО ПРОЕКТА НА UNREAL ENGINE 5
До скорого! Не прощаюсь, ведь у нас есть еще много интересных тем, которые требуют пристального внимания