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

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

Это первая статья из серии, посвященной созданию растительности для виртуального продакшена. В этой части я расскажу о том, как создавал первый набор деревьев - Ольха. Но в первую очередь мы поговорим о комплексной системе реализации растительности. В заголовке сказано, что система основана на мегаскановских деревьях. При детальном анализе этой системы, упор в первую очередь был сделан на сложный шейдер, потому что именно он задает тон всему остальному и именно он реализует высокий уровень рендера листвы. Разумеется, все этапы важны и от каждого зависит общий результат, но основа - шейдер. Так что начнем с него. Все начинается с переключателя, определяющего режим работы шейдера, коих два: Default Lit - работает на стандартную поверхность, например ствол и ветви (кора), хотя в моей модификации эта механика разделяется на несколько и значительно дополняется функционалом: TwoSided Foliage - этот режим включает механизмы прозрачности или карт прозрачности (Opacity Map), двухстороннего ренд

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

Но в первую очередь мы поговорим о комплексной системе реализации растительности.

В заголовке сказано, что система основана на мегаскановских деревьях.

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

Разумеется, все этапы важны и от каждого зависит общий результат, но основа - шейдер.

Так что начнем с него.

-2

Все начинается с переключателя, определяющего режим работы шейдера, коих два:

-3

Default Lit - работает на стандартную поверхность, например ствол и ветви (кора), хотя в моей модификации эта механика разделяется на несколько и значительно дополняется функционалом:

-4

TwoSided Foliage - этот режим включает механизмы прозрачности или карт прозрачности (Opacity Map), двухстороннего рендеринга.

Это нужно для листвы:

-5

Здесь богатый функционал, который, разумеется, зашит в отдельные функции.

Также, в этом шейдере определено, какие атрибуты должны работать на реализацию визуала - это Base Color, Roughness, Specular, Normal и отдельно Sub Surface (для листвы), а также Ambient Occlusion (для коры):

-6

Разберем на примере функции - MF_Generate TwoSided Specular, в которую зашиты параметры управления бликом листвы:

-7

Вообще эта система достаточно специфична.

Здесь, например, Specular отрабатывается не напрямую соответствующей картой, а через карты Roughness и Translucency (черно-белая интерпретация SSS-карты):

-8

Естественно, есть куча скалярный параметров, регулирующих тот или иной аспект атрибута Specular, как то его интенсивность, отдельное управление контрастом карты, чтобы выделять рисунок карты и акцентироваться на деталях.

Ну и конечно сами текстуры:

-9

Не менее важная часть работы - работа с атласом листвы:

-10
-11

Такие уникальные атласы создаются в несколько этапов.

Мой подход заключался в следующем:

  • подбор исходных атласов из различных библиотек типа Fab (ранее Quixel Megascan)
  • извлечение информации из исходной текстуры и ее передача на хайпольные детали (отдельно созданные листочки по шаблону исходного атласа)

Этот этап можно проводить и иначе, а именно создавать с нуля модели листочков, разворачивать на UV и затем красить в том же Substance Painter.

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

Поэтому я просто спроецировал исходный атлас на плоскость и уже из нее вырезал по контуру листочки.

Что касается веточек, которые вы видите на изображении выше, были достаточно быстро сгенерированы в Speedtree и перенесены в 3ds max.

Их можно сделать и сразу в 3d-редакторе, но Speedtree дает куда лучший результат, что и понятно.

А когда все было готово, остается:

  • сборка атласа и перенос на запечку в Substance Designer

Кстати, итоговый атлас можно можно собрать и запечь в Speedtree, но итоговое качество меня не устроило, поэтому я колдовал полу процедурными методами, полу-ручными.

  • когда атлас (набор текстур готов), его можно перенести в Speedtree и подготовить его для генерации деревьев
-12

Подготовка материалов сводится к назначению текстур и созданию трафаретов по атласу:

-13

А дальше сама генерация и набор нужного количества ассетов:

-14
-15

Как видите, структура сборки разная, это зависит от формы, размеров и структуры дерева/кустика, который вы создаете.

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

Так что, кто хочет овладеть этим навыком - добро пожаловать на мой полный курс. Он очень объемный.

А пока освещу финальный этап работы:

  • перенос ассетов в движок и редактор с последующей доводкой до рабочего состояния (LOD’ирование/Nanite) и оптимизация

Когда же все готово можем оценивать итоговый результат:

-16
-17
-18

В следующей части я более подробно разберу шейдер и то какие еще возможности в нем есть.