Моделирование реалистичных деревьев с использованием NGPlant и Blender

Оригинал статьи:
http://yorik.uncreated.net/tutorials/treemaking.html

Этот урок научит вас моделировать реалистично выглядящую растительность в 3D, близкую к тому, что вы можете найти на сайте blender greenhouse, откуда взяты эти примеры:

В уроке будет рассмотрен только функционал программы NGPlant, и будет сказана пара слов об импорте в блендер.
Конечно, мы будем использовать только open-source ПО: ngplant для генерирования и Bender для финального рендеринга композиции (хотя часть с Blender здесь не рассматривается). Соответственно, первым шагом для вас будет установка указанных программ, в случае их отсутствия. Перечисленное ПО является мультиплатформенным, поэтому вы сможете работать в любой ОС на ваш выбор. Разумеется вы можете использовать другие приложения, поэтому мои советы будут носить общий характер. Но все же я бы порекомендовал начать пользоваться указанными программами, т.к. они являются замечательными составляющими компьютерной графики, о которых должен знать каждый.

1. НЕМНОГО ТЕОРИИ

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

Первое золотое (и вы поймете почему) правило гласит: в мире растений ВСЁ начинается с математического правила. Расположение деревьев в лесу. Расстояния между различными частями дерева разных возрастов. Расположение веток и подразделение ствола. Угол наклона веток к стволу. Размер веток, их форма. Сочетание нескольких листьев в пучке. Сложная структура цветка. Всё подчинено правилам. В моем холодильнике завалялся зеленый перец:

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

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

Третье правило, безусловно, самое интересное, сложное и в какой то степени эзотерическое — это правило Фибоначи. Этот момент нуждается в пояснении, даже если вы не будете его использовать. Фибоначи был математиком 13-го века, открывшим интересную последовательность: создал последовательность чисел, каждый раз прибавляя к новому числу сумму предыдущих. Вы начинаете с 1, добавляете 0, это даёт 1. Далее 2, затем 2+1=3, далее 3+2=5, далее 5+3=8, итд, итп. Таким образом последовательность Фибоначи выглядит так: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657…

Выглядит не очень полезно, да? На самом деле это примитивнейший код, используемый природой в эволюции. Все растения следуют этому правилу во время роста. Сначала одна ветвь, потом другая, далее их три, потом пять…, думаю вы поняли. Если вы взгляните на растения — вы найдете последовательности Фибоначи повсюду. Этот закон определяет себя в том, как появляются листья на ветке, как организуются лепестки цветка, где возникают цветы на деревьях, и т.д.

Но эта последовательность есть нечто гораздо большее. Вы найдете его всюду, где есть жизнь. Популяция кроликов увеличивается по правилу Фибоначи. Форма раковины моллюсков. Устройство пчелинных ульев. Пропорции Вашего тела… Один из главных примеров это ,конечно же, построение спиралей (см рисунок).

Казалось бы, что такого? Но листья размещаются на ветви по спирали Фибонначи. Насколько мне известно, около 92% растений следуют этому правилу.

Существует одна важная вещь для нас во всем этом: повторяющиеся математические последовательности — это именно то, что компьютеры делают лучше всего! Процесс, используемый программой, чтобы воссоздать дерево очень похож на процесс, используемый в природе. Как только вы откроете какое либо ПО, генерирующее деревья, вы увидите, что его параметры тесно связаны с тем, что мы только что обсуждали выше.

Хватит теории. Если вы хотите знать больше о листорасположении можете прочитать эту отличную статью:http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibnat.html

2. НАБЛЮДЕНИЯ И ПОЛУЧЕНИЕ МАТЕРИАЛОВ

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

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

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

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

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

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

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

3. МОДЕЛИРОВАНИЕ: NGPLANT

Хорошо, теперь пришло время, чтобы запустить софт. Открываем ngplant. Интерфейс довольно прост. Вы можете поворачивать / панорамировать вид кнопками мыши, собственно как и выбирать / добавлять / удалять слои ветвей из списка (нижняя правая панель). Затем, вы играете с настройками выше, в полях веток. Каждый слой ветвей имеет свою «Stem» панель, которая контролирует только его параметры. Вкладка «Branching» контролирует, где потомки ветвей крепятся к своим родителям.

Вкладку «Material» мы не будем особо использовать, т.к. создадим материалы прямо в блендере. Но вы также можете сделать все материалы и отображение здесь, если хотите.

Вкладка «General» служит для создания случайных вариаций, когда наше дерево уже сделано.

Интерфейс ngplant
Итак, давайте начнем, с создания нашего толстого ствола. Я покажу вам, как параметры взаимодействуют между собой (их не так уж и много). Например, вот как получить форму толстого ствола, как на нашей картинке:

Просто , не правда ли? Мы просто поменяли параметры в разделе «cross-section».

Хорошо. Сейчас внимательно взглянем на наши картинки: из ствола растет очень узкая группа основных ветвей. Они начинают расти практически вертикально, затем достигая вершины почти разворачиваются в форму «чаши».

Добавим второе поколение веток, начиная примерно с трети ствола и придавая им форму чаши.

Добавим новый слой ветвей начиная примерно с 50% высоты родителя. Регулируйте параметр min offset, чтобы ветви росли выше. Кривая Declimation поднимет ветви кверху. А вот кривая phototropism изогнет ветви до требуемой формы. Попробуйте, пока не уловите взаимосвязь. Параметром variation добавьте сотые доли. В конце увеличте density и revolution angle — таким образом вы размножите ветви по окружности всего ствола, и т.к. они станут разряженнее — компенсируете количество полем density.

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

Добавляем новый слой ветвей, стартующих от 40% длины родителя (min offset). Немного поиграйте с declination и revolution angle. Как и в предыдущем случае изменяйте phototropism. Настройте density в соответствии с внешним видом.

Теперь вы видите, что мы могли бы пойти гораздо дальше, это дерево может получить еще пару слоев веток, чтобы иметь более хаотичный вид. Но мы также должны быть осторожны, чтобы не сделать наши деревья слишком тяжелыми для просчета. Хороший способ серьезно упростить расчеты — уменьшайте параметр Resolution в группе Cross-section. Таким образом вы уменьшите количество граней в профиле ветви, что снизит количество полигонов.

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

Теперь самая смешная часть: добавляем листья. Мы будем добавлять листья на каждый слой ветвей.

Добавляем первый слой листьев (так же как добавляем ветки, только потом stem model -> тип quad), поверх третьего слоя ветвей. Придайте им цвет и сделайте двухсторонними. Задайте листьям некоторый угол вращения (revolution angle), немного наклона (кривая declination), и немного подредактируйте кривую масштаба ( scaling), так, чтобы более крупные листья находились ближе к концу ветви.

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

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

4. ИМПОРТ В BLENDER

Думаю, что с импортирование obj объектов проблем возникнуть не должно.

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

398 0 850 6
2
2019-06-19
Спасибо большое, очень полезная статья.
2023-03-14
Шикарная статья! Низкий поклон Вам за такой труд!!!
RENDER.RU