3D-модель, использованная в этом руководстве:

  

Привет всем!

Это второй из двух вводных видеоуроков по Geometry Nodes modifier в Blender 2.92.

В предыдущем уроке мы исследовали nodes группы Geometry (то есть Transform и Join, для изменения и объединения фигур в модификаторе); возможность создавать входные порты для Group Input, чтобы задавать параметры на вкладке модификаторов, а также использование некоторых узлов Vector и Utilities nodes (в частности, Math) для выполнения математических операций и объединения информации.

В этом видео мы увидим другое использование Geometry Nodes, поскольку мы будем использовать их в качестве систем частиц для "рассеивания", то есть распределения экземпляров объектов по поверхности других. Однако все темы, затронутые в первом видеоуроке этой мини-серии, здесь пригодятся.

B3D Geometry Nodes 2 of 2 01

Модификатор Geometry Nodes позволит нам преобразовать геометрию объекта, который ее использует, в генератор точек, которые будут распределены по его поверхности (то есть, по его граням).

Соответственно, эти точки можно использовать для упорядочивания экземпляров других объектов. Кроме того, Geometry Nodes также позволяют нам назначать преобразования (положение, поворот и изменение размера) каждой из этих точек, чтобы внести степень случайности.

Перечисляя эти операции, я, в частности, сказал о трех вещах:

  1. преобразование фигур в набор точек, РАСПРЕДЕЛЕННЫХ по поверхности;

  2. РАЗМНОЖЕНИЕ объектов в этих точках (через создание экземпляров);

  3. изменение характеристик (АТРИБУТОВ) сгенерированных точек и, таким образом, оказание влияния на созданные экземпляры.

Эти три операции переводятся в такое количество Geometry Nodes, что мы их сразу видим.

В сцене, видимой на экране, есть очень простая плоскость (Plane) с настройками по-умолчанию (она состоит всего из 4 вершин и одной грани). Кроме того, с помощью APPEND я импортировал 3D-модели камешков-гальки ("Pebbles"), камня ("Stone 1") и объекта, содержащего травинки.

Для удобства я группирую камешки в Collection и скрываю все эти вспомогательные элементы, отключая их в редакторе Outliner.

B3D Geometry Nodes 2 of 2 02

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

Я выделяю Plane и добавляю к объекту Geometry Nodes modifier.

B3D Geometry Nodes 2 of 2 03

Чтобы выполнить первую операцию, т.е., преобразовать плоскость в набор распределенных по ее поверхности точек, я добавляю Point DISTRIBUTE node в середину группы.

B3D Geometry Nodes 2 of 2 04

Мы видим на экране, что Plane исчезла. Вместо нее появился набор точек ... ну, на самом деле, эта исходная информация никуда не потерялась, она все еще существует: неразрушающий способ моделирования Geometry Nodes позволяет нам добавить Geometry Join node между Point Distribute и Group Output и подключить к одному из двух входов Join геометрию, пришедшую от Geometry Input (то есть, исходная Plane).

B3D Geometry Nodes 2 of 2 05

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

Point Distribute node предоставляет некоторые параметры, среди которых выделяется Density (плотность), что позволяет нам интуитивно увеличивать или уменьшать количество точек, которые будут распределены по поверхности.

B3D Geometry Nodes 2 of 2 06

В предыдущем видеоуроке мы узнали, как подключить информацию о node к Group Input, чтобы иметь возможность изменять значения в интерфейсе модификатора. Возможно, имеет смысл сделать это и для параметра Point Distribute Density.

Мы переходим ко второй операции из трех, перечисленных выше, то есть к созданию экземпляра другого объекта (или коллекции объектов (Collection) ), размещая копию для каждой точки, созданной с помощью Point Distribute: мы затем вставим Point INSTANCE node между Point Distribute и Join.

B3D Geometry Nodes 2 of 2 07

Смысл операции ясен: Distribute генерирует точки, а Instance берет информацию из этих точек для создания копий другого объекта ... да, но какого объекта?

В Point Instance node есть селектор, который позволяет нам определить, хотим ли мы создать экземпляр одного объекта или Коллекции объектов (Collection). Итак, режим выбран (в моем случае - Object). Мы можем щелкнуть по пустой клетке, расположенной внутри node, и выбрать интересующий нас объект (в данном случае, "Stone 1").

B3D Geometry Nodes 2 of 2 08

ВАЖНОЕ ПРИМЕЧАНИЕ: для получения правильного результата убедитесь, что вы применили преобразования Rotation и Scale к объектам, экземпляры которых вы хотите создать. Вы можете сделать это, выделив их, затем нажав CTRL A, затем выбрав "Rotation and Scale" в меню Apply, которое появится на экране.

Затем мы настроим параметр Density у точечного распределения (Point Distribute) по желанию, пока не достигнем результата, который нас устраивает.

B3D Geometry Nodes 2 of 2 09

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

В обоих случаях узлы преобразования будут вставлены между Point Distribute и Point Instance, поскольку им придется изменить созданные ТОЧКИ ПЕРЕД генерацией из них экземпляров.

Например, давайте начнем с вращения, которое будет применено ко всем точкам: затем мы добавим Point Rotate node между Point Distribute и Point Instance и изменим углы вращения частиц.

B3D Geometry Nodes 2 of 2 10

Результат уже лучше, чем без этого node. Но как внести случайность во вращение и, почему бы и нет, в размер этих экземпляров?

Нам помогает Attribute Randomize node (от слова "Random" - случайный), который мы можем каскадировать между Point Rotate и Point Instance. На самом деле этот поток обработки всегда имеет место быть на геометрических фигурах, в чем можно убедиться, наблюдая связанные порты Geometry между различными nodes.

B3D Geometry Nodes 2 of 2 11

Attribute Randomize - это узел (node), который позволяет нам вносить случайность в АТРИБУТ точек, который должен быть точно задан в поле "Attribute" у node.

Само собой разумеется, что среди основных атрибутов частицы у нас есть "rotation" и "scale", поэтому давайте начнем с указания "rotation" в этом поле, поменяв значение Max...

B3D Geometry Nodes 2 of 2 12

Фактически, узел привносит случайность в ориентацию частиц, но они вращаются вокруг всех своих осей, что нам не очень интересно: мы хотели бы сохранить базовую ориентацию, заданную Point Rotate, и вращать экземпляры случайным образом только вокруг вертикальной оси.

Чтобы решить эту проблему, нам нужно изменить значение типа операции с Float (которое представляет собой число с плавающей точкой, действующее равномерно по трем осям XYZ) на Vector, где мы можем поставить 0 для всех значений, кроме величины MAX той оси, которая нас интересует...

B3D Geometry Nodes 2 of 2 13

Но даже эта операция несет в себе проблему: мы потеряли вращение, заданное Point Rotate!

B3D Geometry Nodes 2 of 2 14

В определенном смысле это проблема приоритета: между Point Distribute и Point Instance, мы, по сути, должны сначала поставить Attribute Randomize, а затем Point Rotate.

B3D Geometry Nodes 2 of 2 15

Теперь продублируйте Attribute Randomize и добавьте его между оригиналом и Point Rotate, чтобы заодно изменить параметр Scale (он должен быть записан, как и вращение, полностью в нижнем регистре, иначе Blender не распознает его).

B3D Geometry Nodes 2 of 2 16

Однако в этом случае нам придется изменить все параметры min и max XYZ, чтобы получить интересные результаты (и, возможно, не ставить 0 для минимальных значений, иначе объекты потеряют одно или несколько измерений).

Что касается атрибута Scale, вам может быть удобнее вернуться к типу Float, чтобы использовать только один параметр для минимального коэффициента масштабирования и только один для максимального ... выбор за вами.

Однако с помощью только этих двух Attribute nodes мы получаем довольно большое разнообразие от объекта, который был составлен всего только из одной фигуры: Stone 1.

Если мы изменим тип объекта для создания экземпляра в Point Instance с Object на Collection и укажем коллекцию камешков, все станет намного интереснее!

B3D Geometry Nodes 2 of 2 17

Давайте снова установим Object с нашим камнем (Stone 1) в Point Instance, чтобы изучить другие функции, доступные с Geometry Nodes.

В классических системах частиц мы также можем определить, на каких частях фигур создавать частицы, а на каких - нет. Это делается, в частности, с помощью Weight Painting, путем определения значений плотности (от 0 до 1) на различных частях поверхности... Ну, мы можем сейчас это сделать!

Однако перед тем, как продолжить, мы должны увеличить количество секций у Plane, потому что Weight Painting (которая будет работать вне Geometry Node, на исходной геометрии) работает с вершинами. И четырех базовых вершин Plane недостаточно.

На 3D-представлении мы переходим в Edit Mode и хорошенько поделим всю поверхность. Затем переключимся в Weight Paint mode.

B3D Geometry Nodes 2 of 2 18

B3D Geometry Nodes 2 of 2 19

По умолчанию, поверхность должна быть синей, т.е. "вес 0". Point Distribute node создаст точки в областях с весом 1, поэтому мы должны закрасить области, в которых мы хотим создать экземпляры.

B3D Geometry Nodes 2 of 2 20

ПРИМЕЧАНИЕ: если вы хотите применить экземпляры везде, кроме определенных мест, вам нужно действовать в обратном порядке. В частности, мы используем кисть в областях, которые мы хотим ИСКЛЮЧИТЬ из Point Distribute (тогда Blender автоматически создаст Vertex Group, которая будет иметь "Group" в качестве имени по умолчанию, и мы ее можем переименовать во что-то более понятное, например "Pebbles").

B3D Geometry Nodes 2 of 2 21

В конце операции откройте меню Weights в 3D-окне и нажмите "Invert", чтобы инвертировать веса: теперь окрашенная область будет иметь вес 0, а вес оставшейся части фигуры будет равен 1.

B3D Geometry Nodes 2 of 2 22

Очевидно, ничто не мешает нам изменить веса позже, изменяя значение параметра Weight на вкладке Tool в Weight Paint mode и окрашивая поверхность. Мы просто должны помнить, что мы НЕ будем вставлять экземпляры в области с нулевым весом.

В редакторе Geometry Nodes мы вводим имя Vertex Group в поле Density у Point Distribute node (в нашем случае "Pebbles"; обратите внимание на верхний и нижний регистр): распределение точек на исходной поверхности будет пропорционально установленным нами Vertex Weights.

B3D Geometry Nodes 2 of 2 23

Прежде чем завершить это видеоурок, а вместе с ним и мини-серию "ВВЕДЕНИЕ в Geometry Nodes" в Blender 2.92, давайте посмотрим на еще один пример создания экземпляра объекта. Но с одним изменением.

Внутри схемы, которую мы определили, мы вставляем новый Point Density node, подключаем его к порту Geometry у Group Input. Теперь давайте подключим его к новому (пустому) Point Instance и соединим два Point Instances, находящиеся на сцене, с новым Join Geometry node, который, в свою очередь, будет соединен с Join node, также уже имеющийся на сцене. На практике результирующая геометрия будет задана исходной геометрией, соединенной с геометрией, полученной двумя Instance nodes.

B3D Geometry Nodes 2 of 2 24

В новом Distribute node мы устанавливаем тот же атрибут Density для камня "Stone 1", но в Point Instance мы устанавливаем объект High Grass (высокая трава) в качестве экземпляра.

B3D Geometry Nodes 2 of 2 25

При необходимости мы можем вставить Point Rotate node, чтобы правильно сориентировать травинки.

Давайте также вставим Point Scale node (между Point Rotate и Point Instance), установив, в частности, режим Vector, чтобы была возможность задать масштабный коэффициент размера травы с помощью вектора.

B3D Geometry Nodes 2 of 2 26

Давайте вставим Combine XYZ node и соединим его выход Vector со входом Factor (вектор) у Point Scale. Травинки исчезнут, потому что параметры Combine XYZ будут иметь значение по умолчанию 0.0. Поэтому мы вернем значение XY к 1.0 (или, в любом случае, к адекватному значению для этих размеров).

B3D Geometry Nodes 2 of 2 27

Затем мы подключаем Z-вход от Combine XYZ к новому порту Geometry Input. Как вы, возможно, догадались, цель состоит в том, чтобы отрегулировать высоту травинок в интерфейсе модификатора ... но зачем ограничиваться постоянным значением или необходимостью вручную изменять это значение?

B3D Geometry Nodes 2 of 2 28

Давайте добавим редактор Timeline в окно Blender и установим диапазон кадров для анимации, например 240 кадров.

B3D Geometry Nodes 2 of 2 29

Перейдем к кадру 1, затем установим 0.0 для параметра Z (который мы можем переименовать по желанию, как показано в предыдущем эпизоде с названиями стрелок часов). Затем щелкните правой кнопкой мыши по значению этого параметра и выберите "Insert Keyframe", чтобы фактически записать ключевой кадр анимации.

B3D Geometry Nodes 2 of 2 30

Давайте перейдем к 240-му кадру анимации, изменим значение Z на любое по вашему желанию, а также вставим ключевой кадр для этого параметра в последний кадр нашей анимации.

B3D Geometry Nodes 2 of 2 31

Нам просто нужно нажать Play на Timeline и посмотреть результат нашей анимации.

B3D Geometry Nodes 2 of 2 32

B3D Geometry Nodes 2 of 2 33

Ну вот и все для этого урока!

Увидимся!

B3D Geometry Nodes 2 of 2 34