В прошлой части статьи мы рассмотрели в общих чертах на то, как устроен шейдер для растений. В этой статье мы продолжим эту тему и разберем отдельные функции, реализующие визуальную составляющую его логики.
Начнем с начала.
Каждый элемент работающий отдельно, как полноценный модуль логики представлен функцией. Эти модули переключаются между собой через Static Switch Parameter (отмечено красной рамкой и зеленой).
Также есть внутренние расширения для функционала, например режим для отрисовки ствола и ветвей деревья, работающий в режиме Default Lit можно уточнять, расширяя функционал (отмечено синими рамками внутри красной).
А также по желанию переключается ветер, работающий в двух режимах - стандартный упрощенный - Vertex Color, но в будущем тут появится более сложная модель - Pivot Painter:
Что касается Default Lit, то здесь есть основной модуль, работающий на ствол и ветви:
Его я далее расширил для реализации декора, внутри функции за счет текстур Opacity:
Также я подготовил еще один алгоритм для реализации основания ствола для сложных деревьев.
Дело в том, что на выходе из Speed Tree ствол и ветви дерева получают один основной UV-канал для применения текстуры, где работает принцип тайлинга.
Однако для основания ствола, который назван Stump (пень) делается два UV-канала, в одном из которых реализуется тайловый метод проецирования, а во втором уникальная текстура под запечку и покраску:
Это сделано для повышения детализация основания ствола, то есть той части дерева, которую можно рассмотреть с близкого расстояния.
Мы не будем уходить в дебри и подробно разбираться в особенностях работы шейдера. Однако есть смысл разобрать основной функционал, того как он работает в модуле Default Lit.
Так как исполняющий узел шейдера принимает на себя сигналы от разных модулей, работающих в разных режимах, то его режим - это Use Material Attribute:
Это означает, что разбивки на отдельные атрибуты в нем нет и он принимает сразу всю сумму всех атрибутов единым потоком.
А это, в свою очередь, означает, что в каждом отдельном модуле должен быть либо сборщик атрибутов, либо его установщик. В нашем случае в каждом ветке используется Set Material Attribute:
Это штуковина принимает на себя разные сигналы, работающие каждый на свой атрибут, как то Base Color, Normal, Roughness, Specular и т.д., а затем отправляет эти сигналы общим потоком наружу.
Каждый атрибут или аспект визуала, реализуемого шейдером представлен сложными механизмами, сформированными набором дополнительных материальных функций:
Разберем более подробно лишь Base Color:
Итак, в первую очередь сюда подается сама текстура, представленная в моем случае внешним декларатом (ссылкой объекта на результирующий сигнал):
Как вы видите, каждая текстура представлена своим декларатом, а у маски их аж 3. Это связано с тем, что данная маска - это спредшит, в который по каналам раскиданы разные текстуры.
Конкретно в этом случае, в этом спредшите это выглядит так:
- R (красный канал) карта Roughness
- G (зеленый канал) карта Ambient Ocсlusion
- B (синий канал) карта Displacement
Итак, сигнал от текстуры Base Color поступает на первую материальную функцию MF_Adjust Albedo:
Название функции говорит само за себя MF_Adjust Albedo (регулировка Альбедо или Base Color, т.е. самой текстуры).
А вот ее нутро:
Стандартный набор возможностей для начальной регулировки аспекта Base Color, т.е. работы с цветом.
Основные регулировки - это настройка насыщенности (Saturation), Contrast (контраст цвета), Brightness (яркость оттенка), а также Tint (модификация оттенка).
Первые три представлены одной константой на три вектора.
Это удобно, в ней также есть разбивка на три базовых канала - RGB, в каждый из которых можно определить свой аспект влияния, а также вывести в итоге этот узел в регулируемый параметр в экземпляр материала:
Tint представлен второй константой на три вектора, с результатом выходящим из суммарного RGB, так как тут работаем именно с оттенком:
Кстати, вы видите тут еще один Static Switch Parameter, так что можете сами решать, надо ли вам тинтовать (подкрашивать другим оттенком) исходную текстуру или нет. Параметр можно включать и отключать по желанию.
Мысли вслух: тинтование подключается номинальной функцией Blend Overlay (наложение слоя, как в фотошопе), но можно применить другие методы смешения, например, умножение, добавление и прочее. И их также можно подключать по желанию - через Static Switch Parameter.
Вот так работает регулировка карты Albedo (Base Color). Стандартный набор возможностей.
Далее идет функция, усложняющая функционал - MF_Bark Detalisation (Детализация коры).
На вход подается три сигнала: Albedo, Ambient Oclussion и Displacement, а на выходе - только Albedo, как результат чего-то обработанного:
Уже по этой схеме можно сделать вывод, что в формировании финальной карты Albedo участвуют как-то еще и карты AO и Displacement помимо того, что они сами по себе формируют самостоятельный атрибут - каждая карта - свой.
Как же именно они влияют на финальный результат Albedo?
Давайте разбираться.
В первую очередь, обозначены входы (Inputs) для этих аспектов. Те самые, которые обозначены зелеными стрелочками:
Они также привязаны к ссылкам - декларатам. Но примечательно то, что входы находятся в режимах Vector3, который позволяет извлекать информацию о цвете с каждой из текстур.
Далее идет непосредственно сам функционал.
Ambient Occlusion и Dispacement как-то умножаются на определенные коэффициенты с целью либо повысить значимость текстуры, либо, наоборот, понизить ее.
Далее в равной степени (что тоже, кстати, можно регулировать) смешивается между собой через линейную интерполяцию и затем помножается на текстуру Albedo:
И после этого, исходная Albedo смешивается через линейную интерполяцию с собой, но уже обработанной на предыдущем этапе картами AO и Disp.
При этом здесь уже степень смешения обработки с исходной можно регулировать скалярным значением, а можно вообще исключать регулировку с помощью все того же Static Switch Parameter:
Подобные механизмы (для каждого атрибута - свой) работаю и в других атрибутов.
А так, данный механизм является достаточно простым, но его вполне достаточно. Тот же Base Color атрибут для листвы куда более сложный.
Там и регулировка Albedo и регулировка подповерхностного свечения (полупрозрачность - Translucency) и сезонность в цвете, и режим цвета для двухстороннего рендеринга простейшей геометрии (листьев) и прочие вещи:
Но о таких подробностях вы сможете узнать на нашем курсе.
4 глава посвященная всем этапам производства растительности уже готова к релизу и скоро мы об этом объявим.
В следующей статье, я расскажу о создании растений и травы.