Найти в Дзене
Stronghold of gamedev

Speedtree - спаситель открытых миров

Оглавление

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

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

Благо нашлись умельцы и посвятили этому кучу своего времени.
Speedtree решает вопросики со времен Обливиона, успев посетить сотни фильмов (Аватар например) и тысячи игр, всё благодаря простоте и удобству работы, а так же высокооцениваемой профессионалами фишкой - рандомизацией дерева по образу и подобию всего лишь одной кнопкой.

-2

Моделирование дерева

Рассказ увлекательной истории становления этого важного на арене CGI графики игрока, я пожалуй оставлю другой интересной статье с интернетов, ссылку на которую оставлю в комментариях.
Моя же миссия заключается в освящении технической составляющей софта и интегрируемых для неё плагинов.

Начну я пожалуй с интересной генерации меша ствола и веточек.
Полноценная программа, ровно как и интегрируемый куда-либо SpeedTree Modeller имеют одинаковую логику работы, поэтому воспользуюсь оным в рамках unity :

-3

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

Такая уродина, слепленная мною за 30 секунд, имеет 2 важные сущности :

  • Spine - буквально позвоночник. Это те самые звенья, что можно двигать мышкой. По сути это обычные точки в пространстве, соединенные кривыми Безье. Не смотря на это, низкая полигональность сетки все же выдает угловатые результаты.
Математическая магия ака Кривая Безье
Математическая магия ака Кривая Безье
  • Skin - плоть, а точнее кора древа. Это и есть полигональная сетка, которая формируется вокруг звеньев, учитывая определенный радиус от них.

Все же местная процедурная генерация, ведомая десятком ползунков, позволяет добиться так же прекрасного результата. Взгляните, какое чудо получается у матерого эм... спидтрийщика?

-5

Все подобные магии так же опираются не столько на псевдо-рандом, сколько на математические формулы. Так ползунок "Шум", воздействие которого видно в начале, смещает звенья относительно друг друга, а сотворение висулек - дело той же кривой Безье, проведенной от первого до последнего звена цепи.

Randomize

Рандом же, о возможностях которого я упоминал недавно, творит настоящие чудеса! Сотворив одно древо, можно до посинения тыкать кнопочку и глядеть на сотни похожих, но все же разных деревьев.

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

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

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

-7

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

Праздник оптимизации

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

Однако, попридержите огнетушитель - древо подразделено на LOD'ы, ака уровни детализации. Всего их 4 :

  • Изначальный вариант модели, что прорисовывается, когда камера рыщет рядом :
-8
  • Немножко урезанный, где страдают только текстуры и листва, камера для того должна быть подальше :
-9
  • Упрощение общих форм древа, полигональной сетки ветвей и полная деградация листвы, когда камера уже вдалеке :
-10
  • ПНГ картиночка хыхы, когда камера оглядывает пол мира :
-11

А вот как процесс преображения выглядит в настоящем времени :

-12

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