Найти в Дзене
АнтонВорчит

Unigine - ландшафт. легкий гайд по маскам.

Я занимаюсь ландшафтами в движке Unigine уже...лет пять или шесть. Да и вообще в этом движке. Имея весьма небольшой опыт в Unity и Unreal, но более 20 лет - только в трехмерной графике и моделинге. И создание больших "глобальных" сцен - всегда было непростой задачей. И честно скажу что в моделинге что в ландшафтах - я до сих пор не использую весь возможный потенциал. Изучение чаще всего идет или по редким чужим гайдам или - путем "тыкания" во все подряд, просмотр результата и дальнейший подбор своих опытов под реализацию. Ну и поскольку уже набралась некоторая критическая масса знаний знаний - решил немного рассказать именно про ландшафты в движке. Эта часть более теоретически-практическая на примерах некоторых возможностей. Весьма легких. немного теории в общем (Landscape) Ландшафт в движке представляет собой огромную сетку, выдавленную по карте высот. Чем больше цвет пикселя (от 0 до 255) - тем выше будет точка. Расстояние между отдельными точками заполняется сеткой, которая и форм

Я занимаюсь ландшафтами в движке Unigine уже...лет пять или шесть. Да и вообще в этом движке. Имея весьма небольшой опыт в Unity и Unreal, но более 20 лет - только в трехмерной графике и моделинге. И создание больших "глобальных" сцен - всегда было непростой задачей. И честно скажу что в моделинге что в ландшафтах - я до сих пор не использую весь возможный потенциал. Изучение чаще всего идет или по редким чужим гайдам или - путем "тыкания" во все подряд, просмотр результата и дальнейший подбор своих опытов под реализацию. Ну и поскольку уже набралась некоторая критическая масса знаний знаний - решил немного рассказать именно про ландшафты в движке.

Эта часть более теоретически-практическая на примерах некоторых возможностей. Весьма легких.

немного теории в общем

(Landscape) Ландшафт в движке представляет собой огромную сетку, выдавленную по карте высот. Чем больше цвет пикселя (от 0 до 255) - тем выше будет точка. Расстояние между отдельными точками заполняется сеткой, которая и формирует игровой ландшафт. На этот ландшафт натягиваются текстуры, которые и формируют внешний вид. Чтобы ландшафт знал, где какая текстура будет лежать - используются маски. в которых так же, цветом пикселя указывается насколько явно будет видна та или иная текстура. Это задается так же цветом пикселя (от 0 до 255), однако в цвете RGB есть три канала, следовательно в одну текстуру можно вложить три маски.

текстуры, тайлинг и маски

Допустим у меня есть некоторый базовый ланшафт и файл масок. В файле находится три канала (RGB).

В три слоя укладывается один файл, но - указывается из какого именно канала брать маску. Движок позволяет создать до 20 масок, что хватает для создания дорог, обочин, карт растительности, карты расположения камней или других поверхностей грунта.

RGB-маска
RGB-маска

Включенные маски, имеющие цвет, отличный от "0" на ладншафте будут заполнены текстурой. Интенсивность цвета пикселя - интенсивность текстуры. При этом будет происходить микс двух текстур и более, если пиксель имеет смесь цветов (т.е. в других каналах тоже есть значения).

белые маски на ландшафте
белые маски на ландшафте

Допустим мне необходимо заполнить маску Red - текстурой "А", Green - "B", Blue - "C". Для этого создается отдельные материалы внутри каналов масок, с собственными настройками тайлинга и остальными текстурами.

заполнение текстурами масок
заполнение текстурами масок

Что бросается в глаза? тайлинг - "плиточность, повторяемость" - повторение одинаковых текстур. В играх это часто встречается, а вот в реальности - редко. Чтобы избавиться от тайлинга можно или искать особые безшовные текстуры, или - бороться с тайлом.

Для этого поверх существующего материала, создается еще один материал, с той же текстурой, но с поворотом текстуры, изменением размера и - картой прозрачности.

смешивание масок в одном из каналов чтобы смягчить тайлинг.
смешивание масок в одном из каналов чтобы смягчить тайлинг.

И повторяется тоже самое в каждом канале.

микс текстур при использовании масок прозрачности
микс текстур при использовании масок прозрачности

Как уже видно - однородности и повторяемости текстуры практически не видно. При замене текстур на менее резкие - тайлинг практически пропадает.

Такой же способ применяется и для глобального общего слоя. Однако можно заметить падение детализации текстур. для этого можно дополнительно добавить отдельные канал для с более качественной текстурой для ближнего вида (изменяя параметры в Texel Size)

разная видимость текстур будет зависить от дальности до камеры
разная видимость текстур будет зависить от дальности до камеры

Нужно еще больше "размазать" текстуры? добавить отдельные каналы с примешиванием цвета.

цветовые пятна на текстурах созданы небольшой "колеровкой" текстур в маске.
цветовые пятна на текстурах созданы небольшой "колеровкой" текстур в маске.

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

обочина в той же маске, что и асфальт
обочина в той же маске, что и асфальт

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