Процедурный террейн
Вся суть террейна кроется в его шейдере
Его полное представление на рисунке ниже:
Этот шейдер выстроен полностью на базе реверсивного исследования сложного процедурного материала от Brushify.io с некоторыми моими авторскими модернизациями
Здесь представлено множество различных аспектов, дающих в сумме Next-Gen результат (далее все будет влиять от текстурных сетапов, которые вы получите и примените к материалу для работы)
Полный анализ и разработку такого топового материала мы естественно рассматриваем на большом курсе в теме, посвященной настройке ландшафта
Однако уже сейчас стоит выделить несколько ключевых аспектов:
- Самое главное, что касается таких сложных систем (кто имеет хотя бы небольшой опыт в таких вещах знает), что шейдеры или точнее шейдерные системы собираются из отдельных модулей, каждый из которых отвечает логике отдельного аспекта, отрабатываемого в шейдере
Никогда все подряд не сваливается в одну кучу...
Отдельные аспекты представлены материальными функциями, где в первую очередь вы должны побеспокоиться о количестве и типах входов (Inputs) и выходов (outputs)
Вот пример одной из таких функций, реализующих тесселяцию и дисплейсмент:
2. Кто работал с шейдерами для лендскейпа знают о слоевой структуре
В сложных шейдерах также собирается комплекс из слоев отдельными функциями:
Такая функция не только включает в себя данные о каждом слое поверхности, но и выводят наружу все аспекты PBR - рендера для текстурных сетапов каждого слоя (например, отдельно слой с грунтом соснового бора, отдельно слой с болотистой поверхностью, отдельно слой со снегом, отдельно - песчаные поверхности, травяные и т.п.)
И эти аспекты мы видим здесь (BaseNormal, Roughness, Displacement, Slope Albedo и Normal - склоны и т.п. - все что вам нужно)
3. Если вскрыть такую функцию, то именно здесь мы увидим сложение всех слоев, которыми в будущем сможем красить ландшафт:
Обратите внимание, что каждый слой и здесь представлен материальной функцией, например: MossyNeedles (мшистые хвойные иголки)
Хитрая нода (1) отвечает за тайлинг и оффсеты (сдвиги текстур) в зависимости от дальности камеры наблюдателя (нода 2)
Ноды (6 и 7) - это просто текстурные семплы (текстуры), которые отображаются на дальних планах (можно сказать с высоты птичьего полета), однако по мере приближения в какой-то момент эти текстуры отключаются и вместо них включается текстура (8)
Вот именно ее и можно увидеть в процессе игры - она является доминирующей. Для нее также и реализован тайлинг
Таким образом у нас реализовано три плана: дальний, средний и ближний. И для каждого их них работает полный функционал настройки и управления
Управляют всем этим механизмом ноды 1, 2, 3 и 4
Нода 5 - это отдельная функция, которая полностью соответствует всему что представлено на предыдущем рисунке
Но она отвечает за работу карт нормалей:
Ну и нода 9 - это выход для подключения этой функции — слоя в общий механизм шейдера
Кроме того, отдельно стоит отметить функционал работы т.н. Grass Type
Здесь я могу включать или отключать независимо от остального грасс тайпы для каждого слоя:
Благодаря грасс тайпам я уже имею объем на ландшафте еще до внедрения растительности и прочих декалей
Вот так выглядят слои без грасс тайпов:
А вот так с включенными грасс тайпами:
Естественно, если здесь включаются какие-то травинки, то через их материал можно включать и колыхания на ветру, тогда это все становитсяне только объемным, но еще и динамическим
Но это уже вопрос настройки растительности
Поговорим о растительности в следующем посте, а пока вот вам еще несколько слоев моего ландшафта без грасс тайпа: