Как соединить узлы, чтобы получать и задавать информацию о них одновременно? - PullRequest
0 голосов
/ 29 июня 2018

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

Это создает цикл, который Майя не любит.

Что мне делать, если я хочу запрашивать и устанавливать информацию в одном узле?.

Я хочу, чтобы это было чем-то вроде ограничения. Вы связываете объект с группой объектов и перемещаете их в зависимости от первого объекта.

1 Ответ

0 голосов
/ 04 июля 2018

Вы действительно не хотите создавать цикл. Maya не просто произвольно относится к циклам ненависти - она ​​архитектурно не настроена для двунаправленного потока данных, как это - A в DAG является «ациклическим». У Maya нет естественного способа избежать постоянного обновления графика DAG при изменении входных данных, а затем испачкать себя, что может сделать вашу сцену очень вялой или вынудить ее стать зависимой от истории (как это делает ткань или симулятор физики). Если вы посмотрите на график потока для регулярных ограничений, вы увидите, что он всегда однонаправленный. Можно создавать ситуации, которые являются формально циклическими, но безвредными - например, соединения с сообщениями иногда вводят Майю в заблуждение, что вы создали цикл, но поскольку они не передают изменяющиеся данные, они безвредны. Но в целом циклов следует избегать.

Вы можете избежать цикла, кэшируя исходные отношения, но сохраняя их в качестве кэша, то есть создавая их так, чтобы вы не могли управлять содержимым кэша с помощью входящих соединений. Затем ваш узел может делать с кэшированными данными все, что ему нравится, не раздражая Maya. Если бы вы сделали это с помощью пользовательского плагина узла, вы просто должны были убедиться, что атрибуты данных кэша не были доступны для записи, что предотвратило бы любой обман. Ограничение здесь заключается в том, что кэшированные данные не будут динамическими - они будут отражать состояние во время установки отношения - но после этого это пассивные данные, «лист» на графе DAG без восходящих соединений , Вы можете добавить инструменты для редактирования этого кеша, но если вы пытаетесь управлять кешем с входным соединением, вы только что повторили проблему. Это примерно то, как работают динамические системы - существует начальное состояние, а затем состояние может быть улучшено или перемотано. Однако само начальное состояние не может быть анимировано.

Другой способ сделать это - полностью обойти даг. Вы можете использовать scriptJob (или ловушку сообщения API), чтобы вызвать желаемый эффект при каждом обновлении кадра. Это не будет очень производительным в пользовательском интерфейсе Maya и будет зависеть от истории (если вы сделаете что-то подобное, вам нужно будет кэшировать начальное состояние сцены и восстановить его, когда пользователь вернется к нулю) , Такой вид настройки иногда неизбежен для очень сложного поведения, но с ним также не интересно работать и он подвержен сбоям. Используйте только тогда, когда ничего не работает.

В общем, майя просто ненавидит двунаправленные отношения. Возможно, вы захотите проверить плагин ExoSwitch , который утверждает, что является «двунаправленным ограничением» - он, вероятно, выполняет кучу кэширования времени сеанса, но он может дать вам представление о том, какое поведение возможно.

...