К содержанию
fohbookбета/ TouchDesigner

Несколько процессов

Тяжёлое и рискованное — в отдельный процесс. Engine COMP: входы, параметры, часы и буферы, ловушка с onStart, во что обходится разделение и как TouchEngine работает в Unreal и медиасерверах.

Ветка вашего пульта:
Быстрый выбор:

Операторы кукаются в главном потоке. Свои потоки есть у декодера видео, у части устройств и у Python через Thread Manager — Отложенный запуск и потоки, — но сеть считается по очереди. Разнести работу по-настоящему можно только по процессам.

Engine COMP

Грузит .tox в отдельный процесс TouchEngine и показывает результат в проекте как обычный узел. Лицензия любая, Non-Commercial тоже. Входы и выходы верхнего уровня компонента — TOP, CHOP, DAT — становятся входами и выходами Engine COMP, пользовательские параметры появляются на нём же. Параметры передаются только внутрь, а ссылки на узлы не поддерживаются — узлы подключают входами. Reload on Crash поднимает упавший процесс, а пристыкованный Info CHOP показывает статус движка, его производительность и готовность компонента.

На Tune Clock = Synchronized ведёт время компонента в такт Engine COMP, Independent — по часам движка, и только так компонент может открыть свой Window COMP и уйти в Perform, вместе с Allow UI на Advanced. Своя частота — Frames per Second вместо Match Local Component Rate, и тяжёлое считается реже проекта. Буферы In Buffer Frames и Out Buffer Frames в Auto сглаживают разницу скоростей, но буфер — это кадры отставания, а для звука его ставят руками. Wait for Render ждёт опоздавший кадр не дольше Render Timeout.

onStart в движке молчит

Компонент грузится в уже запущенный процесс, и onStart() с onExit() у Execute DAT там не вызываются никогда. Начальная настройка — в onCreate(), он срабатывает при загрузке.

Пути внутри компонента считаются от .tox (Asset Paths), пути в пользовательских параметрах — от основного проекта.

Что выносить Зачем
Нейросети Модель падает, шоу идёт дальше — Нейросети
Тяжёлая генеративная сцена Своя частота, вывод не ждёт
Внешние библиотеки Python Сбои и конфликты остаются в своём процессе
Чужие куски проекта Разработка и отладка порознь
Сеть, большие файлы Не крадут кадр у вывода

Цена

Буферы — кадры задержки. Память у каждого процесса своя, со своей копией всего нужного. Видеокарта на машине одна на всех, и документация прямо предупреждает: гонять большие картинки Touch In/Out TOP между процессами одной машины бывает бесполезно. Вторая карта помогает, когда процесс привязан к своей, Несколько экранов. И в движок не заглянешь так же легко, как в свою сеть.

TouchEngine снаружи

Тот же движок запускает .tox в чужих программах: официальный плагин Unreal Engine, Pixera, Smode, Screenberry, Hippotizer, LightAct, VDMX на macOS, Resolume через FFGLTouchEngine, PyTorch через TouchPy. Разработчику программы это бесплатно, а пользователю нужен установленный TouchDesigner или TouchPlayer с платной лицензией — Educational, Commercial или Pro; с Non-Commercial снаружи не заработает. Обычная связка — логика и интерактив в .tox, фотореализм и вывод в Unreal или на медиасервере.

Дальше — машины: Touch In/Out между экземплярами (Вывод по сети), NDI, где терпима задержка (Камеры и платы захвата), OSC для состояния, таймкод или Sync-операторы для общего времени (Синхронизация машин). «Одна считает, вторая выводит, третья в резерве» — обычная схема больших инсталляций, Резерв.

Делить заранее

Резать готовый монолит больно. Если заранее видно, что будет нейросеть или тяжёлая симуляция, её с первого дня держат в отдельном .tox.

Процессы переживают друг друга

Если движок упал, проект показывает последнее состояние или запасную графику. Проверяют нарочно: Quit Engine Process на Advanced и смотрят, что на экране, — Падает или зависает.

Нашли в статье ошибку, устаревшее или непонятное место?

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