О выращивании зелени в больших количествах (ч.1)
Приветики! После нескольких лет работы художником природного окружения, в частности растительности и ландшафтов, я решил сменить сферу деятельности и склепать то, что по Закону Вселенной обязано быть у каждого инди разработчика: пиксельная игруха. Маленькая, но своя.
Собственно, это и сподвигло меня поделиться накопленным опытом. Так что в своих постах я постараюсь как можно подробнее описать то, как воспроизвести в деталях красоту наилучшего (по моему мнению) царства живых организмов.
Поехали
Сегодня я в общих чертах расскажу о пайплайне работы над растительностью. И хоть это, вероятно, для моих коллег не будет новой информацией, надеюсь, что кому-то этот пост да будет интересным.
На службе у меня стоят такие софтины как:
- Speedtree — процедурный генератор растительности с настраиваемыми нодами и весьма широким фукнционалом, куда также возможно добавить собственные меши;
- Blender — универсальный юнит, в котором по необходимости можно смоделить какие-то простые модельки для тех же цветков или отредактировать другой импортируемый в Speedtree меш;
- Zbrush — полезнейшая вещь, если хочется детализации стволов, листьев и прочих мешей;
- Substance Designer — увлекательный инструмент для процедурного создания текстур;
- Substance Painter — помощник в запекании карт с высокополигональных мешей из Zbrush и рисовании масок для материалов;
- Quixel Bridge — весьма впечатляющая библиотека сканов всего на свете, можно использовать в качестве готовых текстур, а можно — в качестве хорошей основы для цвета текстуры, генерируемой в Substance Designer.
В следующих выпусках будет более продвинутый материал по текстурам, по моделингу, по материалам в движке (UE4), и вот это вот все. Ну а пока…
Все начинается с поиска информации и подбора референсов. Обычно я первым делом отправляюсь на википедию: там можно почитать про климатические зоны и что, где и с чем произрастает, а помимо этого — и про каждый вид (и подвид) в отдельности. А если еще перейти на wikipedia commons, то зачастую можно найти множество фотографий растений в различные периоды их жизни. Порой попадаются хорошие снимки коры и листьев.
Рассмотрим, например, лапландский хвойный лес. Там среди всего прочего, весьма активно растут обыкновенные ель и сосна, водяника чёрная, брусника, черника, папоротник орляк и вереск.
О текстурах
Тут все зависит от желаемого стиля. Можно рисовать ручками, можно сгенерировать что душе угодно в Substance Designer, а можно взять и использовать сканы. Как раз сканами Quixel я и пользовался в работе на превьюшке. Благо, большинство нужных растений там было, либо были похожие.
Так как я делал деревья под игры, отращивать по кучке листьев на каждую ветку было бы непозволительной роскошью. К счастью, в Speedtree есть полезный и простой в использовании инструмент для запекания текстур.
Моделится высокополигональная ветка, добавляются листья или иголки по надобности, поворачивается камеру для вида «сверху» и вот — запекается область в набор текстур.
Такие кластеры занимают всего по несколько полигонов каждый. А еще можно к ним крепить кластеры поменьше или вовсе листья. Например на нескольких ветках, которые могут находиться на высоте игрока.
О моделинге
В начале был ствол… Он — как детская игрушка «пирамидка» — служит основой, на которую нанизываются ноды. Можем настроть его высоту, ширину, добавить шума в форму, создавая изгибы, сгладить этот шум. Не стоит забывать про гравитацию. Она, как и прочие доступные в Speedtree силы, помогает придать стволу и веткам желаемой формы. Тут же можно задать необходимую детализацию и с помощью карты дисплейсмента выдавить больше деталей.
А еще для разнообразия и красоты дереву хорошо бы добавить индивидуальности. В арсенале — трещины, порезы, наросты, бугры и отслаивающаяся кора. Помимо этого, куда же без мертвых веток. Да и разнообразие в их длине и толщине лишним не будет.
Те же манипуляции что и со стволом, касаются и корней, и веток. В зависимости от того, какой вид воссоздается, имеющиеся в наличии варианты генерации веток: интервальный, пропорциональный, абсолютное количество, филотаксис (спирально-симметричное размещение), бифуркация (ветвление «пополам» на изгибах) и пр. позволяют воплотить самые дерзкие фантазии.
К ветвям крепятся кластеры, а к ним — подкластеры, либо прочие объекты: шишки, цветы и фрукты.
О ветре и смене времен года
Ветер в Speedtree доступен в виде 3 уровней анимации:
- Базовый уровень — при котором качается ствол, а с ним — и все растение;
- Уровень веток — действует только на 1 ноду в цепи, так что в ход зачастую идут не крупные ветки, растущие от ствола, а ветки поменьше, растущие из других веток;
- Уровень листьев и объектов — ветер влияет на сами листья или кластеры, можно добавить небольшое покачивание или волнение цветам либо фруктам.
Местный Wind Wizard с несколькими пресетами порой выставляет правильные числовые значения по дистанции и частоте покачивания, но их зачастую приходится подкручивать. Каждой анимированной ноде можно настроить кривую влияния ветра.
Если в планах смена сезонов — не беда. Все что нужно — это заиметь дополнительный набор текстур для листьев и кластеров, а затем дело за малым — настроить кривые для замены текстур для каждого материала.
Об оптимизации
Каждому растению по мере удаления от игрока надо бы убрать лишнее — то, что человеческий глаз на расстоянии уже не различит.
Обычно, львиную долю полигонов занимают ветки и ствол. Срезать полигоны можно как в длину, так и в ширину. А ветки, скрывающиеся в густой кроне и вовсе можно скрыть.
Кластеры, как и прочие, и импортируемые меши также можно оптимизировать, упростив их меш в двух дополнительных уровнях детализации.
Есть полезная функция — Collision — позволяющая убрать пересекающиеся кластеры, листья и объекты. Помогает не только для снижения количества полигонов, но и для уменьшения эффекта такой проблемы производительности как Overdraw — нагромождения мешей, имеющих прозрачность в текстуре.
Финальным уровнем детализации служит простейшая моделька из нескольких полигонов, на которую накладывается текстура растения, отрендеренного со всех сторон — называется Billboard. Конечно, можно его сделать сразу в движке с помощью плагинов, но в Speedtree, при экспорте модели, тоже есть такой инструмент.
А что дальше?
Если вы дочитали до этой строки — спасибо вам за внимание) Надеюсь, вам было интересно и вы присоединитесь ко мне в следующих выпусках.
Добра!