О выращивании зелени в больших количествах (ч.1)

Приветики! После нескольких лет работы художником природного окружения, в частности растительности и ландшафтов, я решил сменить сферу деятельности и склепать то, что по Закону Вселенной обязано быть у каждого инди разработчика: пиксельная игруха. Маленькая, но своя.

Собственно, это и сподвигло меня поделиться накопленным опытом. Так что в своих постах я постараюсь как можно подробнее описать то, как воспроизвести в деталях красоту наилучшего (по моему мнению) царства живых организмов.

О выращивании зелени в больших количествах (ч.1)

Поехали

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

На службе у меня стоят такие софтины как:

  • Speedtree — процедурный генератор растительности с настраиваемыми нодами и весьма широким фукнционалом, куда также возможно добавить собственные меши;
  • Blender — универсальный юнит, в котором по необходимости можно смоделить какие-то простые модельки для тех же цветков или отредактировать другой импортируемый в Speedtree меш;
  • Zbrush — полезнейшая вещь, если хочется детализации стволов, листьев и прочих мешей;
  • Substance Designer — увлекательный инструмент для процедурного создания текстур;
  • Substance Painter — помощник в запекании карт с высокополигональных мешей из Zbrush и рисовании масок для материалов;
  • Quixel Bridge — весьма впечатляющая библиотека сканов всего на свете, можно использовать в качестве готовых текстур, а можно — в качестве хорошей основы для цвета текстуры, генерируемой в Substance Designer.

В следующих выпусках будет более продвинутый материал по текстурам, по моделингу, по материалам в движке (UE4), и вот это вот все. Ну а пока…

Все начинается с поиска информации и подбора референсов. Обычно я первым делом отправляюсь на википедию: там можно почитать про климатические зоны и что, где и с чем произрастает, а помимо этого — и про каждый вид (и подвид) в отдельности. А если еще перейти на wikipedia commons, то зачастую можно найти множество фотографий растений в различные периоды их жизни. Порой попадаются хорошие снимки коры и листьев.

Рассмотрим, например, лапландский хвойный лес. Там среди всего прочего, весьма активно растут обыкновенные ель и сосна, водяника чёрная, брусника, черника, папоротник орляк и вереск.

Доска референсов
Доска референсов

О текстурах

Тут все зависит от желаемого стиля. Можно рисовать ручками, можно сгенерировать что душе угодно в Substance Designer, а можно взять и использовать сканы. Как раз сканами Quixel я и пользовался в работе на превьюшке. Благо, большинство нужных растений там было, либо были похожие.

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

Моделится высокополигональная ветка, добавляются листья или иголки по надобности, поворачивается камеру для вида «сверху» и вот — запекается область в набор текстур.

О выращивании зелени в больших количествах (ч.1)

Такие кластеры занимают всего по несколько полигонов каждый. А еще можно к ним крепить кластеры поменьше или вовсе листья. Например на нескольких ветках, которые могут находиться на высоте игрока.

О моделинге

В начале был ствол… Он — как детская игрушка «пирамидка» — служит основой, на которую нанизываются ноды. Можем настроть его высоту, ширину, добавить шума в форму, создавая изгибы, сгладить этот шум. Не стоит забывать про гравитацию. Она, как и прочие доступные в Speedtree силы, помогает придать стволу и веткам желаемой формы. Тут же можно задать необходимую детализацию и с помощью карты дисплейсмента выдавить больше деталей.

Эффект гравитации на ветвях
Изменение уровня шума и его сглаживание

А еще для разнообразия и красоты дереву хорошо бы добавить индивидуальности. В арсенале — трещины, порезы, наросты, бугры и отслаивающаяся кора. Помимо этого, куда же без мертвых веток. Да и разнообразие в их длине и толщине лишним не будет.

Те же манипуляции что и со стволом, касаются и корней, и веток. В зависимости от того, какой вид воссоздается, имеющиеся в наличии варианты генерации веток: интервальный, пропорциональный, абсолютное количество, филотаксис (спирально-симметричное размещение), бифуркация (ветвление «пополам» на изгибах) и пр. позволяют воплотить самые дерзкие фантазии.

К ветвям крепятся кластеры, а к ним — подкластеры, либо прочие объекты: шишки, цветы и фрукты.

О ветре и смене времен года

Ветер в Speedtree доступен в виде 3 уровней анимации:

  • Базовый уровень — при котором качается ствол, а с ним — и все растение;
  • Уровень веток — действует только на 1 ноду в цепи, так что в ход зачастую идут не крупные ветки, растущие от ствола, а ветки поменьше, растущие из других веток;
  • Уровень листьев и объектов — ветер влияет на сами листья или кластеры, можно добавить небольшое покачивание или волнение цветам либо фруктам.

Местный Wind Wizard с несколькими пресетами порой выставляет правильные числовые значения по дистанции и частоте покачивания, но их зачастую приходится подкручивать. Каждой анимированной ноде можно настроить кривую влияния ветра.

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

Об оптимизации

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

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

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

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

Финальным уровнем детализации служит простейшая моделька из нескольких полигонов, на которую накладывается текстура растения, отрендеренного со всех сторон — называется Billboard. Конечно, можно его сделать сразу в движке с помощью плагинов, но в Speedtree, при экспорте модели, тоже есть такой инструмент.

А что дальше?

Если вы дочитали до этой строки — спасибо вам за внимание) Надеюсь, вам было интересно и вы присоединитесь ко мне в следующих выпусках.

Добра!

115115
25 комментариев

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

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

25
Ответить

Спасибо за конструктив!

Ответить

Комментарий недоступен

13
Ответить

Комментарий недоступен

2
Ответить

Спасибо. Как выше заметили, мало технических деталей. Так же нет какого то финала, результат на данном этапе пайплайна. Получилось поверхностно.

2
Ответить

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

1
Ответить

А вы работали с фотограмметрией в SpeedTree? Можете дать пару советов? Конкретно меня волнует следующее, при экспорте дерева, например под Ue4, SpeedTree очень странно распоряжается свободным местом на UV, из-за чего либо ствол, либо сами листья крайне маленькие. Я так и не понял, как самому выставить приоритет.

Еще крайне не прозрачный момент, а как экспортировать карту высот? Допустим я запек ее заранее для ствола с HP модели, но в SpeedTree так и не нашел места, куда ее "засунуть".

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

Ответить