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

Привет всем!

Это первый из двух вводных уроков по Geometry Nodes в Blender (сделанных, в частности, в версии 2.92). Эти уроки для тех, кто уже имеет базовые знания Blender, потому что я буду давать некоторую информацию по интерфейсу и моделированию как само собой разумеющуюся (в обоих режимах - Object и Edit Mode).

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

B3D Geometry Nodes 1 01

На Youtube есть множество уроков, которые, в основном, показывают как применять Geometry Nodes для замены системы частиц, чтобы "разбросать" экземпляры объектов поверх (или внутри) других, таких как камни и травинки на поверхности. Что ж, в следующем уроке я тоже сделаю такой пример. Но в первом уроке по этой теме я хочу сфокусироваться на нескольких базовых концепциях.

Мы сказали, что Geometry Nodes - это модификатор, и мы знаем, что модификаторы отличаются от операторов Blender, потому что они позволяют выполнять преобразования неразрушающим образом. Это значит, что можно изменить некоторые параметры позже, и найти модификации, примененные также в других модификаторах. Например, на видео я показываю разницу между колоннадой, созданной с помощью Array modifier (вверху), и другой колоннадой, созданной с помощью Spin operator (внизу): чтобы изменить высоту колонн, в случае с Array мне просто нужно перейти в Edit Mode и увеличить базовый размер фигур, чтобы увидеть изменения во всех других элементах. Используя же Spin operator, мне придется удалить все созданные элементы, изменить первый элемент в Edit Mode, а затем снова применить Spin.

B3D Geometry Nodes 1 02

Более того, после выполнения операции с operator, если мы переключимся на другой инструмент, мы больше не сможем поменять примененные параметры, в то время как с modifiers эти параметры все еще доступны, и мы сможем изменить их позже (до тех пор, пока мы не применим modifier, конечно же).

B3D Geometry Nodes 1 03

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

Таким образом, Geometry Nodes это modifier, но, в отличие от других базовых modifiers инструмента Blender, его можно настроить, комбинируя узлы (nodes) вместе.

Nodes (узлы) - это в основном визуальное представление двух типов элементов: информации или операций. Если у вас есть опыт создания материалов или пост-обработки в Blender, вы будете знать, например, что вы можете взять входную информацию (определенную в Node), выполнить операции (через комбинацию одного или нескольких промежуточных nodes) и получить конечный результат на выходе (который, в свою очередь, будет определен в node). Итак, давайте посмотрим, как эта концепция применяется к преобразованиям объектов с помощью Geometry Nodes.

B3D Geometry Nodes 1 04

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

B3D Geometry Nodes 1 05

Я настроил интерфейс Blender для работы с Geometry Nodes, открыв редактор "Geometry Nodes" в 3D представлении и открыв вкладку Modifiers для выбранного объекта в редакторе Properties. Примечание: в своем случае я настраиваю такой макет, потому что я записываю видео на одном мониторе; если вы используете второй монитор, я рекомендую вам использовать 3D Viewport и редактор Properties на одном мониторе, а редактор "Geometry Nodes" открыть на другом.

B3D Geometry Nodes 1 06

Минутная и часовая стрелки - это отдельные объекты, связанные с часами; оба объекта имеют исходную точку там, где они должны быть (в их оси вращения), поэтому правильным будет вращение каждого объекта вокруг оси Y (локальной). В любом случае, в этом уроке давайте восстановим начало координат (Origin) одной из двух стрелок (выделив ее и выбрав Cursor to Selected в меню, которое мы можем открыть с помощью SHIFT S), затем мы удалим три стрелки, присутствующие на сцене.

Затем мы добавим куб (Cube), у которого начало (Origin) будет там, где оно было у других стрелок. Это важно, потому что преобразования будут происходить вокруг этой точки.

B3D Geometry Nodes 1 07

Давайте произведем Cube на базе исходных часов, чтобы мы могли перемещать, вращать и изменять размер Cube одновременно с трансформациями часов.

Добавим Geometry Nodes modifier; эту операцию можно выполнить из меню Modifier объекта или с помощью кнопки "New" в редакторе Geometry Nodes.

B3D Geometry Nodes 1 08

По умолчанию создаются два узла (nodes), называемые "Group Input" и "Group Output". Входная группа задает геометрию объекта в том виде, в каком она применена к modifier (здесь указатель уже был смоделирован, а Origin была установлена вручную: Geometry Input будет начинаться с этих данных), в то время как выходная группа - это то, что будет возвращено в конце всей обработки, которую мы будем выполнять между этими двумя nodes.

B3D Geometry Nodes 1 09

nodes добавляются путем выбора их в меню "Add" (быстрый вызов: SHIFT A); в этом меню, в частности, мы отмечаем, что nodes разделены на различные группы, поэтому, например, nodes групп Mesh и Geometry будут воздействовать на весь объект и его геометрию (с операциями в режимах Object и Edit Mode), в то время как группы Point будут действовать на сгенерированные частицы. Другие узлы будут служить, например, для предоставления значений для преобразования объектов (группа Input) или для изменения этих значений (группы Utilities и Vector).

B3D Geometry Nodes 1 10

Чтобы превратить куб в минутную стрелку, давайте добавим Geometry - Transform node, поместив его прямо в середину связи, которая идет от Group Input к Group Output (Blender автоматически сделает соединения).

B3D Geometry Nodes 1 11

Давайте посмотрим на цвет портов ввода и вывода различных nodes, с помощью которых мы управляем потоком данных и их операциями: Geometries имеют зеленый цвет и указывают на то, что туда передается информация обо всей геометрии объекта. С другой стороны, порты типа vector (которые содержат тройки числовых значений, по одному для каждой оси вращения) окрашены в фиолетовый цвет.

Мы работаем с Translation и Scale, чтобы определить минутную стрелку. В частности, мы установили Translation Z в значение 0.049 и Scale XYZ, равное 0.001, 0.001 и 0.050 соответственно.

B3D Geometry Nodes 1 12

Хочу сразу указать на одну вещь: вращение вокруг локальной оси Y, чтобы задать минуты, НЕ ДОЛЖНО выполняться в этом node, поскольку здесь операции происходят по отношению к перемещенной и измененной геометрии.

B3D Geometry Nodes 1 13

Чтобы вращаться вокруг Origin куба, нам нужно добавить новый Geometry - Transform node между только что созданным и Group Output: его мы сможем вращать вокруг оси Y.

B3D Geometry Nodes 1 14

Следует также отметить, что эти преобразования происходят, так сказать, "внутри модификатора": исследуя вкладку объекта "Item - Transform" на 3D-обзоре, мы отмечаем, что на самом деле параметры Location, Rotation и Scale не применялись к исходному объекту. Более того, если мы переключимся в Edit Mode на 3D-обзоре, мы заметим, что на самом деле куб все еще там, со своими исходными характеристиками!

B3D Geometry Nodes 1 15

Это поведение, во всех отношениях сходное с тем, что обнаружено, например, с Subdivision Surface, позволяет нам понять, что Geometry Nodes на самом деле является модификатором (modifier) (и, на самом деле, его можно применить на вкладке Modifiers, что делает преобразования окончательными ... но пока не применяйте его).

Вернемся к редактору Geometry Node. Выберите первый Transform node и продублируйте его (с помощью SHIFT D), затем перетащите из Group Input выход Geometry на вход Geometry этого нового узла (node). Затем передайте выход этого node на вход Geometry input группы Group Output.

B3D Geometry Nodes 1 16

Внутри node мы меняем Scale Z на 0.025, а Translation Z на 0.025, таким образом получая часовую стрелку.

B3D Geometry Nodes 1 17

Как мы видим, можно взять начальную геометрию объекта (в данном случае куба) и передать ее из Group Input нескольким операторам ... но как получить ДВЕ измененные геометрии в одном и том же Object?

Это просто: с помощью Geometry - Join Geometry node, который позволяет нам объединить несколько геометрий в одну и передать результат другим nodes. Таким образом, это то, что делает Join operator в Edit Mode, но здесь мы используем его неразрушающим образом, внутри modifier!

B3D Geometry Nodes 1 18

Мы сбрасываем значение Rotation Y минутной стрелки на 0, дублируем этот узел и помещаем копию в только что созданный рабочий процесс часовой стрелки: таким образом, мы можем устанавливать углы поворота для минутной и часовой стрелок независимо друг от друга.

Итак, давайте посмотрим, как создать небольшой интерфейс с применением Geometry Nodes, чтобы быстро устанавливать часы и минуты на вкладке Modifier и заставить стрелки двигаться автоматически.

Сейчас мы хотим установить Rotation Y на основе текущего времени (число от 0 до 60 для минут и от 0 до 12 для часов, включительно). Начнем с Rotation минут.

Обратите внимание, что Rotation имеет фиолетовый входной порт, это вектор. Чтобы разделить входные каналы, мы добавляем Vector - Combine XYZ node и соединяем выход Vector узла (node), только что добавленного на вход Rotation у трансформации (Transform). Затем соединяем вход Y узла Combine XYZ с новым входом Group Input (просто перетащите связь от Combine XYZ к еле-видимому входному порту Group Input в блоке Geometry).

B3D Geometry Nodes 1 19

На вкладке Geometry Nodes modifier появится параметр ввода "Value" со значением по умолчанию. Чтобы изменить имя этого параметра на "minutes", откройте Sidebar редактора "Geometry Nodes" (клавиша "N", когда курсор мыши находится в этом редакторе), затем измените имя с "Value" на "Minutes".

B3D Geometry Nodes 1 20

Мы также выставим значение 0.0 для Min (минимальное значение, которое пользователь может ввести) и 60.0 для Max.

B3D Geometry Nodes 1 21

Однако, введя любое значение от 0 до 60, мы заметим, что минутная стрелка вращается неадекватно. Это связано с тем, что значение угла Y выражается в радианах, и, в частности, круглый угол равен 6.28 (то есть, удвоенное число пи).

Чтобы выполнить это сопоставление (а именно: привести значение диапазона 0 - 60 в диапазон 0 - 6.28), мы добавляем Utilities - Map Range node между выходом "Minutes" от Group Input и входом Y для Combine XYZ. Затем мы устанавливаем значения node (которые имеют интуитивно понятный смысл) следующим образом:

  • 0 в From Min;
  • 60 в From Max;
  • 0 в To Min;
  • 6.28 в To Max.

B3D Geometry Nodes 1 22

Теперь на вкладке Modifier мы можем легко ввести значение минут, которые мы хотим видеть на часах, и минутная стрелка будет вращаться корректно: это удобнее, чем вращать объект вокруг оси Y!

B3D Geometry Nodes 1 23

Что касается часовой стрелки, образец nodes практически идентичен, за исключением значений сопоставления в узле Map Range. Поэтому давайте поступим так:

  • выберем и создадим копию Map Range и элемент Combine XYZ для минут, размещая их в пустое место редактора;
  • подключим Vector нового Combine XYZ ко входу Rotation часовой стрелки;
  • подключим вход Value нового Map Range к новому выходу Group Input (который, помимо прочего, можно переименовать в Hours);
  • давайте изменим значение "From Max" у Hours для Map Range node с 60 на 12.

B3D Geometry Nodes 1 24

ВНИМАНИЕ: нужно выбрать Group Input и убедиться, что Max значения входных портов для Minutes и Hours установлены правильно на 60 и 12 соответственно!

B3D Geometry Nodes 1 25

На этом этапе мы умеем устанавливать часы и минуты стрелками в интерфейсе Blender, указывать любое желаемое время ... мы закончили? Ну, нет: в настоящих часах, когда минутная стрелка движется вперед, часовая стрелка также движется (с одного часа на другой), в то время как в этой модели этого не происходит (попробуйте, например, установить "2:50" или "4:55": часовая стрелка останавливается на 2 или 4, хотя она должна подойти ближе к 3 или 5).

Нам нужно небольшое приращение, "смещение" поворота часовой стрелки, которое, в частности, должно составлять не более 30 градусов (одна двенадцатая угла поворота, когда минутная стрелка приближается к 60).

Поэтому сначала мы должны взять значение входа Minutes и разделить его на 2, что мы можем сделать с помощью Utilities - Math node, изменив его режим на Divide и установив первым параметром значение "Minutes", а второму присвоить "2".

B3D Geometry Nodes 1 26

Полученный результат представляет собой радиальное смещение, которое будет применено к часовой стрелке, но это значение выражается В ГРАДУСАХ, а нам хотелось бы в РАДИАНАХ ... ну, мы можем легко преобразовать его через еще один Utilities - Math node, на этот раз через "To Radians"!

B3D Geometry Nodes 1 27

Чтобы добавить это значение к значению, полученному из Map Range часовой стрелки (которое уже в радианах), давайте добавим дополнительный Utilities - Math node, на этот раз в режиме Add, добавив Map Range и вывод "To Radians", чтобы затем передать результат операции в Combine XYZ, а затем, наконец, в Y-вращение часовой стрелки.

B3D Geometry Nodes 1 28

Теоретически, на данный момент все работает. Мы это можем увидеть, выполнив несколько тестов с интерфейсом на вкладке Modifier. Более того, если мы трансформируем часы, изменения соответственно применяются и к стрелкам ... Даже так: они применяются к объекту Cube!

Две стрелки на самом деле являются геометрическими фигурами одного и того же исходного Cube, который все еще находится там и связан (как дочерний элемент) с часами: все правки были внесены в Geometry Nodes node и могут быть изменены позже, пока мы не применим modifier.

Однако, прежде чем завершить этот урок, сделаем еще одно наблюдение: поля "Hours" и "Minutes" на вкладке modifier также принимают десятичные значения и учитывают их в своих вычислениях, поэтому визуальный результат может быть неверным (попробуйте, например, поставить 0 для минут, а для часов 9.30).

Неэлегантный, но функциональный способ решить эту проблему - вставить Utilities - Math nodes в режиме Rounding - Floor (то есть округлить ВНИЗ до ближайшего целого) сразу после портов "Minutes" и "Hours" у Group Input; это не скроет десятичные дроби в интерфейсе модификатора, но, по крайней мере, проигнорирует их в вычислениях.

B3D Geometry Nodes 1 29

B3D Geometry Nodes 1 30

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

Скоро увидимся!