Если быть совсем въедливым, надо упомянуть термин DAG-node, то есть это нода, входящая в состав DAG-объекта. Реально существует всего два типа DAG-нод: это transform-нодэ и shape-нода, о которых я уже говорил выше. Transform-нода позволяет группировать объекты, и, как правило, она (если это не пустая группа) имеет подчиненные (child) объекты в виде shape-ноды и других transform-нод. Shape-нода никогда не имеет подчиненных объектов, но всегда имеет хотя бы одного transform-родителя. (Отсюда следует еще одно определение DAG-объекта: как постоянной связки transform+shape.)

Благодаря механизму инстансирования, одна shape-нода может иметь несколько родителей. Именно поэтому DAG называется графом, так как в этом случае он уже перестает иметь структуру иерархического дерева (в котором у потомк всегда один родитель), а становится произвольным графом. Однако в «майской» терминологии уже прижился термин - хотя , строго говоря, некорректный: -дерево зависимостей», или «дерево истории»: под которым понимается, естественно, произвольной формы граф.

Разберем теперь, что такое DG (Dependency Graph). Как следует из названия - это граф зависимостей, представляющий из себя набор нод и связей между ними, DG тоже является направленным (directed), так как связи между атрибутами нод однозначно направлены. Но, в отличие от DAG, он может быть цикличным, так как пользователь может устанавливать связи между любыми двумя нодами и в любом направлении. Связи в DG уже не являются иерархическими отношениями, а представляют собой просто потоки данных между нодами, соединяющими входные и выходные атрибуты этих нод. Именно DG отображается в Hypergraph в режиме Input And Output Connections.

Отсюда можно сделать вывод: DG-нода - просто элемент DG-графа. DG-ноды можно представлять в виде вычислителей, которые получают данные через входящие атрибуты, затем производят вычисления, и их результат через выходные атрибуты отправляют к другим нодам. Примерами DG-нод являются материалы, текстуры, системное время timel, ноды, отвечающие за Construction History, и пр.

Снова погружаясь в тонкости терминологии, можно сказать, что все DAG-ноды являются, в том числе, и DG-нодами, так как transform и shape тоже могут соединяться с другими нодами при помощи Hypergraph или Connection Editor.

Иногда все DG-ноды, кроме transform и shape, называют Non-DAG Nodes. Но здесь лишь подчеркивается то обстоятельство, что такие ноды нельзя сгруппировать или выбрать, а затем перемещать на экране. Материалы и текстуры - основной пример Non-DAG Nodes. Деформеры, глобальное время timel, expressions, blendshape, defaultRenderGlobals и масса других служебных нод - это все Non-DAG Nodes. Некоторые из них изначально присутствуют в любой сцене, некоторые пользователь создает в явном виде (например, материалы или expressions), но большинство из них возникают как служебные или вспомогательные объекты в процессе выполнения тех или иных операций.

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


⇐ вернуться назад | | далее ⇒