3. Практическая часть
После изучения различных методов работы с рекурсией можно переходить к практическим задачам.
В основе каждого проекта лежит использование ноды Solver, которая позволяет быстро создавать анимацию и объединять несколько подходов в одном процессе. Так, активно дополнительно применяются VEX и циклы For-Each.
Всё это позволяет комбинировать процедурные и симуляционные методы, создавая сложные формы и органические анимации.
3.1. Рост кристаллов
Первая практическая задача — создание системы процедурного роста кристаллов на выбранной поверхности.

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

Схема проекта с системой роста кристаллов.
Геометрия поверхности роста

Первый шаг — создание геометрии, на которой происходит рост кристаллов.
Для этой цели создаётся сфера через ноду «Sphere» (тип Primitive Type — Polygon). В параметрах увеличивается частота разбиения Frequency = 20. для большей детализации.

Затем добавляется нода «Mountain» для создания формы, похожей на камень.

Нода «Mountain» Смещение точек относительно их нормалей на основе фрактального шума.
Для изменения амплитуды смещения точек необходимо менять параметр Amplitude, для изменения размера шума воздействия — Element Size, для вариаций смещения — Offset.
Так, через подбор значений находится наиболее подходящая форма камня.
Изменения параметров ноды «Mountain».

Для того чтобы определить область роста кристаллов, добавляется нода «Mask By Feature».

Нода «Mask by Feature» Генерация маски на основе геометрических свойств (высота, кривизна, угол и т. д.).
Для удобства включается отображение маски. В параметре Direction выбирается направление вектора, который создает маску на поверхности. Красная зона — 1, синяя — 0.
Включение отображение маски и изменение направления вектора воздействия в ноде «Mask by Feature».

После создаётся нода «Attribute Wrangle», работающая на уровне Detail. Для отслеживания возраста процесса определяется integer атрибут age:
i@age = 0;
Этот атрибут должен быть создан заранее, чтобы Solver мог его обновлять.

Затем добавляется еще одна нода «Attribute Wrangle», работающая на уровне Primitives. Чтобы впоследствии можно было отделить геометрию камня от геометрии кристаллов, необходимо создать string атрибут name:
s@name = "stone" = 0;
Создание бокса для организации нод.

На выход добавляется «Null» с именем OUT_SOURCE. Это нужно для удобного рефакторинга.
Геометрия кристалла

Второй шаг — создание геометрии кристалла.
Для этого создаётся нода «Box», которая задаёт базовую форму.

Через ноду «PolyBevel» добавляются фаски у куба для создания более реалистичной формы.

Нода «PolyBevel» Создание закруглений вдоль эджей и углов.
Создание фаски через параметр Distance в ноде «PolyBevel».

Затем нода «Normal» настраивает сглаживание и визуально задаёт острые грани у геометрии.

Нода «Normal» Вычисление нормали поверхности (для корректного отображения сглаживания).
Настройка сглаживания через изменение параметра Cusp Angle в ноде «Normal».

В конце этого этапа ставится нода «Null» с именем OUT_GEO.




