Всё, что нужно знать о SpeedTree — инструменте для создания растений в 3D
Знакомимся с историей программы и её редактором.
Иллюстрация: SpeedTree / Interactive Data Visualization, Inc / Дима Руденок для Skillbox Media
Сложно найти игру без флоры. Её формируют не только густые леса, луга и кустарники, но и простые комнатные растения или плющ на зданиях. Как правило, игрок редко обращает внимание на эти детали мира, если не взаимодействует с ними напрямую, но именно они создают общее впечатление от окружения.
Для более эффективной работы разработчики крупных студий активно используют несколько программ, специализирующихся на генерации растительности в 3D. В этом материале мы рассмотрим особенности SpeedTree — одного из самых известных инструментов для моделирования и рендеринга растений в реальном времени.
В этом материале вы узнаете:
- предпосылки к созданию SpeedTree;
- в каких сферах востребована программа;
- чем примечательна текущая версия;
- типы лицензий SpeedTree;
- как создать простую модель в пробной версии и трансформировать её при помощи стороннего объекта.
Тернистый путь к созданию 3D-деревьев
Проект SpeedTree разработан компанией Interactive Data Visualization, Inc (далее — IDV), которую основали Майкл Сечрест и Крис Кинг в начале нулевых. Изначально студия занималась разработкой 3D-технологий в военной и промышленной сфере, но однажды специалисты получили заказ на симулятор гольфа.
«Виртуальное поле для гольфа требовало наличия деревьев. Мы долго и упорно искали ПО для рендеринга с правдоподобными эффектами ветра, гибкими инструментами генерации деревьев и хорошей производительностью.
После тщетных поисков мы решили сами создать деревья и разработали небольшой программный пакет, в который вошёл некоторый функционал, впоследствии ставший знаковым [для SpeedTree], — в том числе алгоритм процедурной генерации геометрии, первая версия SpeedTreeCAD и общий подход к освещению и эффектам ветра.
К сожалению, симулятор гольфа так и не вышел: его поддержка прекратилась, и мы отложили наши первые наработки ПО для создания деревьев в долгий ящик».
Кевин Мередит,
экс-директор по развитию бизнеса Interactive Data Visualization, Inc
Через несколько месяцев IDV получила заказ от архитектурного бюро на создание рендера комплекса площадью более 100 000 м², в котором предполагалось использовать почти 1000 анимированных моделей деревьев высокого качества. Опасаясь, что их генератор не справится с задачей, разработчики обратили внимание на плагины других программ, в частности 3ds Max. Но попытки снова не увенчались успехом. Одни инструменты шли без алгоритма анимации ветра; другие предлагали только высокополигональные модели, что негативно влияло на оптимизацию; третьи и вовсе не соответствовали визуальным стандартам заказчика.
В итоге IDV вернулась к своим прошлым наработкам, усовершенствовала их и справилась с поставленной задачей собственными усилиями. Успех мотивировал компанию продолжить развивать технологию генерации деревьев.
В декабре 2002 года начались первые продажи SpeedTreeRT — промежуточного ПО для рендеринга листвы и деревьев в реальном времени. В нём пользователь мог автоматически изменять уровень детализации листвы, настраивать эффекты ветра и освещение для сотен и даже тысяч моделей.
В марте 2009 года в рамках презентации на GDC IDV представила открытую бета-версию программы под названием SpeedTree 5.0, в которой была доступна не только процедурная генерация, но и настройка деревьев вручную с возможностью экспорта готового контента в игровые движки. Полноценный релиз состоялся в июле 2009 года.
Использование SpeedTree в играх и фильмах
На сегодняшний день SpeedTree активно используют для создания внутриигрового окружения такие ААА-студии, как Epic Games, Sony Interactive Entertainment, Microsoft Game Studios, CD Projekt RED, Square Enix, FromSoftware и Activision. Среди игр — Assassin’s Creed Valhalla, Red Dead Redemption 2, Days Gone, Tom Clancy’s Ghost Recon Breakpoint.
Программа востребована и в киноиндустрии. На счету IDV уже несколько десятков картин, в которых была задействована технология SpeedTree, включая фильмы от Disney и Marvel, а также блокбастеры «Аватар», «Волк с Уолл-Стрит» и «Безумный Макс: Дорога ярости».
SpeedTree применяется для создания окружения в телевизионных шоу с 2011 года, дебютировав в «Улице Сезам». В 2015-м IDV получила премии «Оскар» и «Эмми» за достижения в области технологии и инженерии.
Актуальная версия
Существует две версии SpeedTree 9: это Games (для разработки игр) и Cinema (для создания VFX и архитектурных визуализаций без возможности экспорта в Unity и Unreal Engine). Помимо большого разнообразия уже существующих инструментов для создания 3D-флоры с нуля, в программе появился новый функционал, в частности:
- инструмент для фотограмметрии — Mesh Converter, который помогает оптимизировать детали отсканированного объекта, сохраняя при этом его уникальную геометрию и текстуры;
- режим Freehand для ручного редактирования деревьев;
- поддержка HDRI-освещения;
- новые опции для редактирования ветвей;
- цикличная анимация ветра.
Контент, созданный в SpeedTree, можно легко интегрировать как в игровые движки, включая кастомные, так и в другие программы для 3D-моделирования и рендеринга — Maya, 3ds Max, Blender, Cinema 4D, Houdini, Arnold и Redshift.
Условия лицензирования
SpeedTree совместима с операционными системами Windows, Mac и Linux и распространяется по подписке. Всего существует три типа коммерческих лицензий:
- Indie ($19 в месяц или $199 в год) — для инди-разработчиков и студий, чей доход или инвестиции не превышают $100 000 в год.
- Pro ($299 в полгода или $499 в год) — для компаний с оборотом до $1 млн. Есть вариант оформления более дорогой плавающей лицензии, то есть с возможностью подключать софт на множестве рабочих мест поочерёдно, а также дополнительная покупка доступа к маркетплейсу SpeedTree — Games Tree Library.
- Custom — договорная лицензия по запросу для крупных организаций с доходом выше $1 млн.
Все лицензии поддерживают экспорт в расширениях .obj, .fbx, .usd, .st, .stsdk, .cgf и .xml.
Если пользователь заинтересовался программой, но пока не готов купить её, он может скачать бесплатную версию Learning Edition. В ней доступны все функции для моделирования растений, но нельзя экспортировать модели в другие программы. Проекты, созданные и сохранённые в этой версии, работают только в ней и несовместимы с платными лицензиями. В этом ознакомительном материале мы рассмотрим возможности бесплатной версии SpeedTree.
Установка клиента
Для получения бесплатной версии нужно зайти на сайт и зарегистрировать аккаунт, добавить лицензию в корзину и оформить заказ.
Learning Edition без экспорта моделей имеет неограниченный срок действия, но пользователь также может оформить пробную 10-дневную версию Pro, в которой будет доступен частичный экспорт в игровой движок.
Примечание. Под частичным экспортом подразумевается удаление полигонов из меша в случайном порядке. Таким образом, модель становится непригодной для использования. В лучшем случае произойдёт импорт основного каркаса ствола без листьев и анимации.
Оформив заказ, нужно перейти в раздел Downloads и скачать установочный файл для подходящей операционной системы. После установки и запуска клиента откроется диалоговое окно с выбором шаблонов (верхняя строка) и готовых моделей (нижняя строка). В дальнейшем в последней строке будут отображаться недавние проекты, над которыми вы работали.
Интерфейс редактора
Поначалу интерфейс программы может сбить с толку из-за множества окон и настроек. Но если разобраться в его структуре, то окажется, что на практике создавать деревья в SpeedTree довольно просто, а большое количество ползунков даёт простор для самых смелых экспериментов. В рамках этого материала мы рассмотрим только основной функционал и несколько операций в SpeedTree Modeler. Ознакомиться со всеми возможностями софта можно в официальной документации.
Для начала откроем готовую модель дерева для наглядности и изучим схему интерфейса:
В центре располагается Tree Window (на скриншоте выше — окно №1) — основной 3D-вьюпорт с панелью инструментов для генерации и моделирования объекта, настройки физики и рендеринга. Здесь же находится настройка освещения и направления ветра (значки в правом верхнем углу вьюпорта), а в левом нижнем углу расположена шкала уровня детализации объекта.
Навигация во вьюпорте осуществляется только с помощью мыши:
- ЛКМ — вращение вокруг объекта.
- ПКМ — вызов меню.
- Удержание СКМ — перемещение в пределах плоскости.
- Колёсико мыши — приближение/отдаление.
- Двойной клик ЛКМ — фокус на выделенном объекте.
В верхнем левом углу находится Generator Editor (окно №2). Это система генерации, в которой все составляющие текущего дерева (или другой растительности) представлены в виде нодов и выстроены в логическую цепочку роста. Если выбрать определённый нод, то часть объекта, с которой связан данный фрагмент, будет выделена жёлтым цветом во вьюпорте. Например, на скриншоте выше отмечен нод ствола (Trunk).
Примечание. В Generator Editor удобно выделять отдельные сегменты модели, особенно если элементов очень много. Например, если во вьюпорте нужно скрыть все листья, достаточно выделить ноды Leaf и нажать кнопку H.
Чуть ниже находится основная панель с настройками — Properties (окно №3). Чтобы открыть настройки объекта, нужно выделить модель во вьюпорте.
В Properties есть три режима для редактирования. По умолчанию включён режим Generator, который отвечает за генерацию ключевых элементов растения: ствола, корней, ветвей, листьев. В Generator элементы редактируются кластерами (например, можно увеличивать длину всех веток одновременно), а режим Node позволяет изменять каждую часть по отдельности. Freehand даёт ещё больше свободы — здесь можно рисовать и моделировать вершины объекта вручную.
Меню Materials (окно №4) отображает свойства импортированных в проект текстур. Также здесь есть вкладки для объектов (Meshes), масок (Masks) и карт смещения (Displacement). Их можно включить/отключить в главном меню: Window → Assets.
Окно вывода Output (№5) отображает информацию о внутренних процессах программы.
Первые шаги
Создание растений в SpeedTree — довольно творческий процесс с множеством экспериментов, но изучение функционала программы может занять немало часов. В этом материале мы создадим простое дерево с нуля (шаблон Blank). Шаблоны можно открыть при запуске программы или через меню File → New.
Представленный ниже проект — всего лишь демонстрация самых базовых возможностей программы для начинающих.
Для начала сформируем ствол. Переходим в редактор нодов, кликаем ПКМ по значку Tree и во всплывающей вкладке выбираем Add geometry to selected → Trunk.
Стандартные параметры можно настроить сразу во вьюпорте при помощи меток, которые появятся, если щёлкнуть по стволу в режиме Generator. Управление происходит путём передвижения мыши — предварительно нужно зажать ЛКМ на одной из меток.
Для простых операций с мешами можно воспользоваться горячими клавишами:
- Tab — переключение режимов редактирования,
- H — скрыть выделенный объект,
- W — перемещение,
- E — вращение.
Примечание. SpeedTree не поддерживает русский язык. Если горячие клавиши в SpeedTree не работают, убедитесь, что клавиатура переключена на английский язык — программа не распознаёт русскую раскладку.
С помощью стандартных параметров придадим стволу нужную форму. В этом проекте мы создаём дерево, похожее на дуб, поэтому ствол будет коротким и широким.
По умолчанию ствол представляет собой объект в виде трубки. Если нужно добавить геометрию среза, то нажимаем ПКМ на нод Trunk, переходим в Add geometry to selected → Cap. Этот нод пригодится при создании пня или спиленной верхушки дерева.
Генерация корней
Массивное дерево предполагает массивные корни. Их генерирует ствол, поэтому нажимаем ПКМ на нод Trunk и переходим в Add geometry to selected → Decorations → Roots.
После этого в схеме генерации появится ещё два нода: Root и Root Twings — это основные корни и их ответвления. Если до этого радиус ствола был увеличен, то корни во вьюпорте могут не отобразиться — по умолчанию они «приварены» к стволу и из-за наложения геометрии пропадают. Наличие корней легко проверить, если вновь уменьшить радиус.
Чтобы исправить этот недочёт, выделяем Roots и открываем вкладку Skin (окно Properties). Ищем раздел Welding и убираем галочку с пункта Enabled или отмечаем Keep Failed. И в том, и в другом случае корневая основа перестанет зависеть от геометрии ствола.
Отображённые корни выглядят не очень удачно. Исправить их форму, длину и направление можно при помощи настроек во вкладке Spine. Для начала необходимо поработать с тремя параметрами длины (Length):
- Absolute — минимально допустимая длина;
- + % of parent — длина, которая получается, если умножить значение этого параметра на длину родителя (в данном случае ствола) и прибавить значения Absolute;
- + % radius — для вычисления длины умножается значение этого параметра на радиус объекта (в данном случае корня) и прибавляется Absolute и + % of parent.
Расшифровка не самая простая, но, поэкспериментировав с ползунками, понять действие параметров гораздо легче.
Если по задумке корни дерева должны немного вылезать из земли, их высоту можно отрегулировать как в режиме Node, так и в Generator — в частности, при помощи ползунка Start Angle в параметре Orientation (вкладка Spine).
Форма корневого массива настраивается во вкладке Gen (Generation). Здесь есть 10 режимов генерации, настройки которых влияют на направление роста корней, их толщину, количество отростков и так далее. Сгенерированные корни можно вновь отредактировать в индивидуальном порядке в режиме Node.
Ветви и листья
Перейдём к созданию ветвей. Лучше всего начать с крупных: Trunk → Add geometry to selected → Branches → Big. После к ноду Big можно добавить малые ветви (Little), а к нему, в свою очередь, ещё один нод Little. Чтобы крона дерева выглядела более пышной, малые ветви можно дополнить нодом, отвечающим за разветвление, — Bifurcating.
Ниже приведено несколько настроек, на которые можно обратить внимание первым делом.
Вкладка Gen:
- Расположение ветвей — режимы (Mode).
- Увеличить количество ветвей —
- параметр Number в режимах Proportional, Absolute;
- параметры Number и Steps в Proportional Steps, Absolute Steps (два параметра зависят друг от друга);
- Frequency в режимах Classic, Interval (значение Count в этом режиме влияет на количество ветвей, растущих на одном уровне);
- Absolute в режимах Flood и Parent;
- Threshold в Bifurcation. При экспериментах с этими параметрами стоит помнить, что ветви генерируются по алгоритму, обусловленному тем или иным режимом.
- Общий размер ветви — параметр Size Scalar во вкладке Gen.
Вкладка Spine:
- Согнуть ветви — настройки в разделе Noise.
Закончив настройку ветвей, выделяем мелкие ветки в редакторе нодов и создаём листья: Add geometry to selected → Leaf. Чтобы листва была более пышной, увеличим количество мешей с помощью ползунка Number во вкладке Gen.
Создание материалов
Теперь добавим текстуры для нашего дерева в меню Materials. Нажав на + рядом с предыдущей кнопкой, можно импортировать свои текстуры или загрузить готовые от SpeedTree — это очень удобно, если нужно создать простые реалистичные деревья в короткие сроки.
В разделе Settings есть несколько слотов для разных типов карт (если панели Meshes, Displacements и Masks их перекрывают, то последние стоит закрыть). Если кликнуть по слоту, откроется меню настройки текстуры.
В текущем примере мы воспользуемся готовыми текстурами дубового листа из набора SpeedTree (их можно найти в папке samples/Broadleaf/Leaves). С помощью кнопки + находим и выбираем цветную текстуру листа (в данном случае — Oak_Front 1.png). Программа подгрузит весь набор доступных карт в нужные слоты.
Если какие-то из них нужно заменить или добавить дополнительные, достаточно кликнуть по слоту карты, и откроется окно поиска.
Готовый материал следует установить на листву методом перетаскивания при помощи значка ладони в верхней части окна.
Если материалов много, желательно упорядочить их по названиям. Открываем список, нажав на значок +/− в правой верхней части окна. Здесь можно создавать (Add new), удалять (Remove) и переименовывать материалы — для последнего достаточно кликнуть ЛКМ по названию два раза.
Теперь создадим материалы для ствола, корней и веток тем же способом, что и для листьев. Вновь используем готовые текстуры из стартового набора SpeedTree (папка samples/Broadleaf/Bark).
Импорт стороннего объекта и настройка физики
В SpeedTree существует инструмент Forces, который отвечает за трансформацию моделей под воздействием определённых условий. В данном материале мы рассмотрим физику дерева относительно стороннего объекта в программе — площадки для будущего домика на дереве.
Для этого загрузим в сцену заранее подготовленный меш в формате .fbx: открываем вкладку Meshes, по аналогии с материалами нажимаем кнопку + и импортируем модель, а затем перетаскиваем её в сцену.
Примечание. В SpeedTree существует своя система исчислений в футах (её можно изменить в Preferences… → Tree Window → Scene Unit). Объекты, импортированные из других программ, могут оказаться большими по сравнению с деревом. Поэтому после импорта важно открыть настройки модели в окне Properties, при необходимости изменить размер в разделе Transform → Scale и ввести новые параметры в пункте Uniform.
Также желательно сбросить координаты в разделе Translation. Это избавит от возможных проблем, связанных с расположением меша при дальнейшем экспорте.
Создаём материал — для этого можно взять текстуры из архива или вновь воспользоваться библиотекой SpeedTree — и переносим его на новый объект. Для удобства временно отключим все ноды с листьями. Перемещаем (кнопка W) объект по оси Z на вершину дерева примерно в то место, где заканчивается ствол.
В Generation Editor выделяем ноды ветвей, положение которых будет зависеть от стороннего объекта, переходим во вкладку Forces и в одноимённом разделе ставим галочки напротив Allow и названия импортированного меша (в данном случае Plane). После этого сегменты дерева по умолчанию начнут тянуться к стороннему объекту.
Теперь выделим сторонний меш, перейдём в Properties и найдём раздел Behaviour. Здесь находятся свойства, которые отвечают за «реакцию» растительности на объект.
Пункт Force:
- Attract — ветви притягиваются к объекту (стоит по умолчанию);
- Avoid — ветви отклоняются от объекта;
- None — геометрия остаётся без изменений.
Пункт Collide влияет на рост ветвей:
- Obstruct — ветви сталкиваются с геометрией стороннего меша и растут дальше, изгибаясь;
- Prune — ветви сталкиваются с геометрией и ломаются;
- Stop — принцип схож с Prune, но ветви не ломаются, а прекращают свой рост при столкновении с геометрией.
Полученный результат можно откорректировать с помощью дополнительного маркера, который появляется во вьюпорте при выделении сегментов.
Аналогичным способом можно настраивать физику корней — например, если они должны оплетать сторонний объект.
Примечание. В окне с нодами рядом с сегментами могут появляться восклицательные знаки. Если на них нажать, откроется окно с сообщениями программы о некорректной работе параметров, которые могут повлиять на окончательный результат (например, некоторые сегменты могут быть автоматически скрыты при столкновении с геометрией стороннего объекта).
В таких случаях стоит обратить внимание на проблемные места — нужные настройки легко найти в Properties, значок +/− рядом с ними будет выделен красным. При этом следует учесть, что сообщения о некорректной работе не всегда означают критические ошибки, и некоторые из них можно пропускать.
При необходимости отдельные ветки подгоняем вручную.
В результате получилось дерево с ветвями, которые склоняются под действием фундамента будущего дома. Так как это пробная версия, импортировать новую модель в игру не получится, но можно сделать простой рендер, нажав кнопку F9.
Примечание. В полной версии SpeedTree свою работу можно экспортировать через File → Export to game… или Export mesh… Ниже — руководства по экспорту в Unreal Engine 4 и Unity.
Итог
SpeedTree — гибкий инструмент для создания растений. Его относительно несложно освоить, но, как и все редакторы, он требует усидчивости: тестирование всех настроек и возможностей займёт не один день. Но если разобраться в основных инструментах программы и иметь чёткий концепт на старте проекта, то процесс пойдёт значительно быстрее. Вопрос только в том, насколько сам разработчик нуждается в софте.
Максим Курбанов
3D-художник, IThub games
«SpeedTree — удобная программа для создания растительности. Она развивается достаточно быстро, и с каждым обновлением добавляется интересный функционал, включая работу с фотограмметрией и возможностью доделывать отсканированный объект.
Огромный плюс SpeedTree — дружелюбный и интуитивный интерфейс, который легко освоить. Также программа значительно экономит время: например, процесс создания дерева может ускориться в три раза по сравнению с обычным софтом для 3D-моделирования. Не могу не отметить возможность рандомизировать параметры, что добавляет деревьям ту самую природную хаотичность. Если освоить процедурную генерацию, можно получать огромное количество вариаций одного и того же дерева в один клик.
Ещё хочется отметить возможность настраивать автоматический риг дерева, процедурные уровни детализации и коллизии, адаптивную оптимизацию и Vertex Colors, что очень помогает при работе с растительностью для игр. Когда работаешь в SpeedTree, то понимаешь, что разработчики любят своё детище и делают его на совесть. По моему мнению, сейчас программа справляется с созданием деревьев лучше, чем любой другой 3D-пакет».
Крупные студии используют SpeedTree в разработке масштабных проектов с огромными мирами, которые нуждаются в богатой и реалистичной флоре: создавать вручную гектары лесов слишком долго и затратно. В инди-сегменте ситуация немного иная, всё зависит от формата проекта.
Если игра предполагает открытый мир или уникальную растительность, то SpeedTree станет отличным подспорьем. В иных случаях можно обойтись покупкой ассетов на маркетплейсах.