Кук: когда узел считается
Главный механизм TouchDesigner: что заставляет оператор пересчитаться и почему половина оптимизации — про это.
Cook — пересчёт оператора. TouchDesigner считает не всю сеть каждый кадр, а только то, что нужно, и понимание этого механизма отличает работающий проект от тормозящего.
Правило
Оператор кукается, если выполняется хотя бы одно:
- изменились его параметры;
- кукнулся кто-то из его входов;
- он зависит от времени (
Noiseс анимацией,LFO,Movie File In); - на него ссылается кто-то, кто кукается;
- у него включён флаг
Cook Always; - его показывает вьюер, окно вывода или панель.
И наоборот: узел, который никому не нужен, не считается вообще.
Отсюда — половина «загадок»
| Симптом | Причина |
|---|---|
| Меняю параметр, ничего не происходит | Узел не подключён к выводу и не кукается |
| Ветка «зависла» на старом кадре | Заморожена замком |
| Патч тормозит, хотя на экране почти ничего нет | Кто-то кукается впустую: открытый вьюер, Cook Always, ссылка |
| Стоит закрыть окно параметров — становится быстрее | Вьюеры узлов считают то, что не нужно |
Как посмотреть, кто кукается
- Performance Monitor (
Alt+Y) — порядок и время кука за один кадр. probeиз палитры — живой график по времени и памяти.- Info CHOP на узле — поле
cook_timeи счётчик куков. - В сетевом редакторе включите отображение времени кука: узлы подпишутся миллисекундами.
Подробно — Монитор и Probe.
Cook Always
Флаг на странице Common у многих операторов. Заставляет узел считаться
каждый кадр независимо ни от чего. Иногда необходим (например, для узла,
который читает внешнее состояние), но чаще это костыль, поставленный когда-то
и забытый.
Узел с Cook Always тянет за собой всю цепочку вверх по зависимостям.
Один такой флаг в глубине компонента способен разогнать кук всего проекта.
Ищите их первым делом, когда непонятно, откуда нагрузка.
Selective cooking
Приёмы, которые реально сокращают кук:
- Switch вместо Blend, когда нужно выбрать один из вариантов: у Switch есть параметр, который не кукает неиспользуемые входы.
- Null и Select вместо длинных проводов через полсети.
- Замок на статичных тяжёлых узлах.
- Отключать ветки, которых нет на экране:
Base COMPс параметромCooking= off отключает всё внутри. - Разрешение по месту: маска для пост-эффекта не обязана быть в 4K — Разрешение.
Порядок кука в кадре
Внутри одного кадра TouchDesigner считает в фиксированном порядке: сначала CHOP-цепочки и скрипты, потом геометрию, потом рендер и TOP, в конце — вывод в окно. Отсюда практическое следствие: значение, посчитанное CHOP в этом кадре, картинка получит в этом же кадре, а результат рендера CHOP увидит только на следующем — Из чего состоит кадр.