Добавить в корзинуПозвонить
Найти в Дзене

Создание растительности на базе технологии Megascan Tree. Часть 2

В прошлой части статьи мы рассмотрели в общих чертах на то, как устроен шейдер для растений. В этой статье мы продолжим эту тему и разберем отдельные функции, реализующие визуальную составляющую его логики. Начнем с начала. Каждый элемент работающий отдельно, как полноценный модуль логики представлен функцией. Эти модули переключаются между собой через Static Switch Parameter (отмечено красной рамкой и зеленой). Также есть внутренние расширения для функционала, например режим для отрисовки ствола и ветвей деревья, работающий в режиме Default Lit можно уточнять, расширяя функционал (отмечено синими рамками внутри красной). А также по желанию переключается ветер, работающий в двух режимах - стандартный упрощенный - Vertex Color, но в будущем тут появится более сложная модель - Pivot Painter: Что касается Default Lit, то здесь есть основной модуль, работающий на ствол и ветви: Его я далее расширил для реализации декора, внутри функции за счет текстур Opacity: Также я подготовил еще один а

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

Начнем с начала.

Каждый элемент работающий отдельно, как полноценный модуль логики представлен функцией. Эти модули переключаются между собой через Static Switch Parameter (отмечено красной рамкой и зеленой).

Также есть внутренние расширения для функционала, например режим для отрисовки ствола и ветвей деревья, работающий в режиме Default Lit можно уточнять, расширяя функционал (отмечено синими рамками внутри красной).

А также по желанию переключается ветер, работающий в двух режимах - стандартный упрощенный - Vertex Color, но в будущем тут появится более сложная модель - Pivot Painter:

-2

Что касается Default Lit, то здесь есть основной модуль, работающий на ствол и ветви:

-3
-4

Его я далее расширил для реализации декора, внутри функции за счет текстур Opacity:

-5
-6

Также я подготовил еще один алгоритм для реализации основания ствола для сложных деревьев.

Дело в том, что на выходе из Speed Tree ствол и ветви дерева получают один основной UV-канал для применения текстуры, где работает принцип тайлинга.

Однако для основания ствола, который назван Stump (пень) делается два UV-канала, в одном из которых реализуется тайловый метод проецирования, а во втором уникальная текстура под запечку и покраску:

-7

Это сделано для повышения детализация основания ствола, то есть той части дерева, которую можно рассмотреть с близкого расстояния.

Мы не будем уходить в дебри и подробно разбираться в особенностях работы шейдера. Однако есть смысл разобрать основной функционал, того как он работает в модуле Default Lit.

Так как исполняющий узел шейдера принимает на себя сигналы от разных модулей, работающих в разных режимах, то его режим - это Use Material Attribute:

-8

Это означает, что разбивки на отдельные атрибуты в нем нет и он принимает сразу всю сумму всех атрибутов единым потоком.

А это, в свою очередь, означает, что в каждом отдельном модуле должен быть либо сборщик атрибутов, либо его установщик. В нашем случае в каждом ветке используется Set Material Attribute:

-9

Это штуковина принимает на себя разные сигналы, работающие каждый на свой атрибут, как то Base Color, Normal, Roughness, Specular и т.д., а затем отправляет эти сигналы общим потоком наружу.

Каждый атрибут или аспект визуала, реализуемого шейдером представлен сложными механизмами, сформированными набором дополнительных материальных функций:

-10

Разберем более подробно лишь Base Color:

-11

Итак, в первую очередь сюда подается сама текстура, представленная в моем случае внешним декларатом (ссылкой объекта на результирующий сигнал):

-12
-13

Как вы видите, каждая текстура представлена своим декларатом, а у маски их аж 3. Это связано с тем, что данная маска - это спредшит, в который по каналам раскиданы разные текстуры.

Конкретно в этом случае, в этом спредшите это выглядит так:

  • R (красный канал) карта Roughness
  • G (зеленый канал) карта Ambient Ocсlusion
  • B (синий канал) карта Displacement
-14

Итак, сигнал от текстуры Base Color поступает на первую материальную функцию MF_Adjust Albedo:

-15

Название функции говорит само за себя MF_Adjust Albedo (регулировка Альбедо или Base Color, т.е. самой текстуры).

А вот ее нутро:

-16

Стандартный набор возможностей для начальной регулировки аспекта Base Color, т.е. работы с цветом.

Основные регулировки - это настройка насыщенности (Saturation), Contrast (контраст цвета), Brightness (яркость оттенка), а также Tint (модификация оттенка).

Первые три представлены одной константой на три вектора.

Это удобно, в ней также есть разбивка на три базовых канала - RGB, в каждый из которых можно определить свой аспект влияния, а также вывести в итоге этот узел в регулируемый параметр в экземпляр материала:

-17

Tint представлен второй константой на три вектора, с результатом выходящим из суммарного RGB, так как тут работаем именно с оттенком:

-18

Кстати, вы видите тут еще один Static Switch Parameter, так что можете сами решать, надо ли вам тинтовать (подкрашивать другим оттенком) исходную текстуру или нет. Параметр можно включать и отключать по желанию.

Мысли вслух: тинтование подключается номинальной функцией Blend Overlay (наложение слоя, как в фотошопе), но можно применить другие методы смешения, например, умножение, добавление и прочее. И их также можно подключать по желанию - через Static Switch Parameter.

Вот так работает регулировка карты Albedo (Base Color). Стандартный набор возможностей.

Далее идет функция, усложняющая функционал - MF_Bark Detalisation (Детализация коры).

На вход подается три сигнала: Albedo, Ambient Oclussion и Displacement, а на выходе - только Albedo, как результат чего-то обработанного:

-19

Уже по этой схеме можно сделать вывод, что в формировании финальной карты Albedo участвуют как-то еще и карты AO и Displacement помимо того, что они сами по себе формируют самостоятельный атрибут - каждая карта - свой.

Как же именно они влияют на финальный результат Albedo?

Давайте разбираться.

В первую очередь, обозначены входы (Inputs) для этих аспектов. Те самые, которые обозначены зелеными стрелочками:

-20

Они также привязаны к ссылкам - декларатам. Но примечательно то, что входы находятся в режимах Vector3, который позволяет извлекать информацию о цвете с каждой из текстур.

Далее идет непосредственно сам функционал.

Ambient Occlusion и Dispacement как-то умножаются на определенные коэффициенты с целью либо повысить значимость текстуры, либо, наоборот, понизить ее.

Далее в равной степени (что тоже, кстати, можно регулировать) смешивается между собой через линейную интерполяцию и затем помножается на текстуру Albedo:

-21

И после этого, исходная Albedo смешивается через линейную интерполяцию с собой, но уже обработанной на предыдущем этапе картами AO и Disp.

При этом здесь уже степень смешения обработки с исходной можно регулировать скалярным значением, а можно вообще исключать регулировку с помощью все того же Static Switch Parameter:

-22

Подобные механизмы (для каждого атрибута - свой) работаю и в других атрибутов.

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

Там и регулировка Albedo и регулировка подповерхностного свечения (полупрозрачность - Translucency) и сезонность в цвете, и режим цвета для двухстороннего рендеринга простейшей геометрии (листьев) и прочие вещи:

-23

Но о таких подробностях вы сможете узнать на нашем курсе.

4 глава посвященная всем этапам производства растительности уже готова к релизу и скоро мы об этом объявим.

В следующей статье, я расскажу о создании растений и травы.