Поля (fields)¶
По сути, поле – это функция: набор инструкций, которые могут преобразовывать произвольное количество входов в один выход. Затем результат поля может быть вычислен много раз с различными входными данными. Они используются во всех геометрических нодах, чтобы обеспечить расчёты, которые дают разные результаты для каждого элемента (вершины меша, грани и т. д.).
Например, на рисунке выше, – поле, соединённое с нодой Set Position, зависит от двух входов, Position и Index, и преобразует их в вектор с помощью единственной инструкции.
Отображение поля¶
Формы сокетов используются для выражения того, какие из них являются полями, а какие – обычными данными. Существует три возможных формы сокета, каждая из которых отображает свой «статус поля»:
- Окружность (circle):
Сокет требует одно реальное значение, он не может принимать поле ввода. Для сокетов вывода это означает, что нода всегда выводит единое значение.
- Ромб:
Сокет может принимать ввод поля или выводить поле. К этим сокетам можно подключить постоянное единичное значение, но тогда выход часто не будет меняться для каждого элемента.
- Ромб с точкой:
Сокет может быть полем, но в настоящее время это единое значение. Это полезно, поскольку позволяет отслеживать, где вычисляются единые значения, по сравнению с полем с множеством разных результатов. Это также означает, что проверка сокета покажет значение, а не имена полей ввода.
Совет
Часто требуется извлечь из поля одно значение. Хотя концептуально не имеет смысла простое преобразование поля в одно значение, для извлечения одного значения из поля, оценённого по геометрии – можно использовать ноду Sample Index или ноду Attribute Statistic.
Когда соединение устанавливается между двумя сокетами ноды, которые поддерживают поля – соединение ноды будет отображено пунктирной линией. Если вы допустили ошибку, подключив неполевой сокет к сокету поля, соединение будет отображено сплошной красной линией, указывающей на наличие ошибки.
Типы нод (node types)¶
Ноды можно разделить на две категории: ноды потока данных, которые обычно передают геометрию, и ноды полей, которые работают с данными для каждого элемента. Ноды поля могут быть входными узлами, которые вносят геометрические данные в дерево нод, или функциональными нодами, которые работают с этими данными.
Ноды потока данных¶
Ноды с входной и выходной геометрией почти всегда будут нодами потока данных. Это означает, что они фактически изменяют данные геометрии, которые будут выводиться модификатором Geometry Nodes.
Функциональные ноды¶
Ноды с ромбовидными входами и выходами являются нодами поля и напоминают инструкции, которые будут оцениваться нодами потока данных. Примерами функциональных нод являются математические ноды, а также более сложные ноды, такие как нода Geometry Proximity.
Ноды ввода (input nodes)¶
Входные ноды предоставляют данные для процесса оценки поля. Сами по себе они ничего не значат; они должны быть оценены в контексте ноды потока данных (геометрия), чтобы фактически вывести значение. Примерами входных узлов являются встроенные входные ноды атрибутов, такие как нода Position и нода ID, а также ноды выделения, такие как нода Endpoint Selection.
Вводные поля также могут поступать от других нод, обрабатывающих геометрию, таких как нода Distribute Points on Faces, в форме анонимных атрибутов.
Контекст поля¶
Все ноды полей работают в контексте ноды потока данных, с которой они соединены. Контекст обычно состоит из типа компонента геометрии и домена атрибутов, поэтому он определяет, какие данные извлекаются из входных нод.
Одним из распространённых заблуждений является то, что одно и то же дерево нод полей, используемое в нескольких местах, будет выводить одни и те же данные. Это не обязательно верно, потому что дерево нод полей будет оцениваться для каждой ноды потока данных, потенциально извлекая данные из другой или изменённой геометрии.
Здесь поле ввода ноды Set Position оценивается один раз. Чтобы оценить поле, узел проходит назад, чтобы получить входные данные из нод ввода поля.
Когда добавляется вторая нода Set Position, одно и то же дерево нод полей оценивается дважды, по одному разу для каждой ноды потока данных. Во второй ноде Set Position результаты будут другими, так как её входная геометрия уже будет иметь изменённое положение из первой ноды.
Однако часто необходимо использовать одни и те же значения поля даже после изменения геометрии. Нода Capture Attribute оценивает поле, копируя результат в анонимный атрибут геометрии.
Здесь нода Capture Attribute хранит копию исходного „положения“. Обратите внимание, что оценка ввода поля ноды Capture Attribute – это совершенно другой шаг. Позже поля ввода для нод Set Position используют не фактическое положение, а его копию анонимного атрибута.