На форуме периодически всплывает вопрос, как сделать градиентную раскладку кирпича или плитки от одного цвета к другому. Ниже хочу описать метод, который на первый взгляд выглядит довольно сложно, но на самом деле понятный и простой в дальнейшем использовании. Т.е. вам достаточно один раз настроить материал, и в дальнейшем его можно будет использовать для миксования различных материалов, просто корректируя параметры карты Tiles.
Допустим, у нас есть две вот такие текстуры кирпича разного цвета, и нам необходимо сделать градиент от одного цвета к другому. Важно, чтобы обе текстуры совпадали по количеству кирпичей.
Для начала хочу показать принцип, по которому будем смешивать текстуры. Делается это с помощью параметра % Holes процедурной карты Tiles.
Создаём обычный материал, в карту диффуза которого помещаем карту Mix, где как раз будут смешиваться наши две текстуры. В качестве карты смешивания добавляем Tiles, обязательно установив в параметрах Horiz. и Vert. Count количество кирпичей в наших текстурах. В моём примере это 30 кирпичей в длину и 80 рядов по высоте.
Сделав это, попробуйте покрутить параметр % Holes и увидите, каким образом происходит смешивание текстур. На картинке ниже показаны примеры при значениях 0% (исходный красный цвет), 20%, 80% и 100% (исходный бежевый цвет).
Пользуясь этим, мы и будем настраивать градиентный переход текстур.
Начнём.
Создаём новый материал, и в его карту диффуза помещаем Gradient Ramp. Убираем промежуточные флаги, оставив только начальный и конечный, переключаем тип градиента на Linear, а тип интерполяции на Solid. Затем необходимо разбить шкалу градиента на несколько отрезков. Чем больше отрезков у вас будет, тем плавнее можно настроить градиент, но и тем сложнее у вас получится материал. В этом уроке я рассмотрю вариант градиента из семи промежуточных уровней, на мой взгляд, этого достаточно для большинства задач.
Сразу замечу, что нужно разделять каналы маппинга градиента и смешиваемых текстур. Лучше для градиента использовать первый канал маппинга, а для текстур и тайлов второй. Это позволит использовать градиент на объектах, маппинг на которых генерится автоматом при создании или наложении каких-либо модификаторов (например, Sweep).
Для удобства сразу вытащим в матэдитор семь парных карт Tiles и Mix. Исходные текстуры присоединим соответственно к первому и последнему флагам Gradient Ramp, это будут начальная и конечная точки градиента. Как видно, эти текстуры я использую не напрямую, а через ещё одну карту Tiles, которой при желании можно задать некоторое разнообразие текстуры кирпича с помощью Color и Fade Variance. Но это не обязательно, можно исключить две левых карты Tiles, и просто использовать везде исходные текстуры.
Далее последовательно в каждую из карт Mix добавляем в первый слот текстуру первого кирпича, во второй слот текстуру второго кирпича, а в карту смешивания соответствующую карту Tiles.
Затем присоединяем эти карты Mix последовательно к флагам карты Gradient Ramp.
Обратите внимание, что второй флаг пропускаем. Это последний флаг на шкале (выделен зелёным на скрине ниже), и в режиме интерполяции Solid он не используется.
Далее переходим собственно к настройке градиента. Крутя параметр % Holes каждой из семи карт Tiles, пытаемся добиться равномерного градиента. Результат меняется нелинейно, так что не получится просто выставить значения с равным шагом, нужно именно подбирать. У меня получились такие значения этого параметра в семи картах Tiles (снизу вверх):
3 - 8 - 20 - 30 - 40 - 80 - 99
Также для большего рандома можно каждой карте Tiles задать своё значение Random Seed.
Но самая верхняя карта даже при значении 99 даёт слишком много светлых кирпичей, и поэтому на градиенте всё равно получится явно заметная граница между 99% и 100% (полностью красным кирпичом). Поэтому для самой верхней карты используем то же самое значение, что и для самой нижней, просто поменяв местами две текстуры кирпича в настройках карты Mix.
Вот и всё, наш материал готов. Из него можно легко получить градиентное смешивание любых двух материалов. Ниже на скрине пример смешивания двух цветов плитки. Причём если в исходные карты добавить ещё и ранжирование по цвету и тону, то получится более сложный градиент.
Значения Horiz.Count и Vert.Count всех карт Tiles можно привязать к контроллерам для удобства дальнейшего редактирования. Для этого создаём два контроллера типа Linear Float и привязываем каждый из них поочерёдно к каждой из Tiles, выбирая соответствующий параметр. Теперь, меняя значение в контроллере, можно изменять его сразу во всех связанных с ним картах.
Ниже пример использования этих материалов на различных объектах. Как видите, градиент растягивается в зависимости от размера объекта, при этом совершенно не тайлится, а масштаб исходных текстур остаётся неизменным. Для этого не требуется больше никаких дополнительных настроек, только правильно наложить два канала маппинга.
Надеюсь, будет полезно. Если что-то непонятно, то спрашивайте, с удовольствием объясню.
По традиции ссылки на предыдущие статьи:
Раз - Два - Три - Четыре - Пять - Шесть - Семь - Восемь - Девять