К содержанию
fohbook/ TouchDesigner
уверенный

Кук: когда узел считается

Главный механизм TouchDesigner: что заставляет оператор пересчитаться и почему половина оптимизации — про это.

Cook — пересчёт оператора. TouchDesigner считает не всю сеть каждый кадр, а только то, что нужно, и понимание этого механизма отличает работающий проект от тормозящего.

Правило

Оператор кукается, если выполняется хотя бы одно:

  1. изменились его параметры;
  2. кукнулся кто-то из его входов;
  3. он зависит от времени (Noise с анимацией, LFO, Movie File In);
  4. на него ссылается кто-то, кто кукается;
  5. у него включён флаг Cook Always;
  6. его показывает вьюер, окно вывода или панель.

И наоборот: узел, который никому не нужен, не считается вообще.

Отсюда — половина «загадок»

Симптом Причина
Меняю параметр, ничего не происходит Узел не подключён к выводу и не кукается
Ветка «зависла» на старом кадре Заморожена замком
Патч тормозит, хотя на экране почти ничего нет Кто-то кукается впустую: открытый вьюер, Cook Always, ссылка
Стоит закрыть окно параметров — становится быстрее Вьюеры узлов считают то, что не нужно

Как посмотреть, кто кукается

  • Performance Monitor (Alt+Y) — порядок и время кука за один кадр.
  • probe из палитры — живой график по времени и памяти.
  • Info CHOP на узле — поле cook_time и счётчик куков.
  • В сетевом редакторе включите отображение времени кука: узлы подпишутся миллисекундами.

Подробно — Монитор и Probe.

Cook Always

Флаг на странице Common у многих операторов. Заставляет узел считаться каждый кадр независимо ни от чего. Иногда необходим (например, для узла, который читает внешнее состояние), но чаще это костыль, поставленный когда-то и забытый.

Cook Always заражает

Узел с Cook Always тянет за собой всю цепочку вверх по зависимостям. Один такой флаг в глубине компонента способен разогнать кук всего проекта. Ищите их первым делом, когда непонятно, откуда нагрузка.

Selective cooking

Приёмы, которые реально сокращают кук:

  • Switch вместо Blend, когда нужно выбрать один из вариантов: у Switch есть параметр, который не кукает неиспользуемые входы.
  • Null и Select вместо длинных проводов через полсети.
  • Замок на статичных тяжёлых узлах.
  • Отключать ветки, которых нет на экране: Base COMP с параметром Cooking = off отключает всё внутри.
  • Разрешение по месту: маска для пост-эффекта не обязана быть в 4K — Разрешение.

Порядок кука в кадре

Внутри одного кадра TouchDesigner считает в фиксированном порядке: сначала CHOP-цепочки и скрипты, потом геометрию, потом рендер и TOP, в конце — вывод в окно. Отсюда практическое следствие: значение, посчитанное CHOP в этом кадре, картинка получит в этом же кадре, а результат рендера CHOP увидит только на следующем — Из чего состоит кадр.

рядом по смыслу