Несколько процессов
Тяжёлое и рискованное — в отдельный процесс. 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() с 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 и смотрят, что
на экране, — Падает или зависает.
Нашли в статье ошибку, устаревшее или непонятное место?