Синхронизация машин и выходов
Несколько машин — одна картинка. Откуда берётся рассинхрон, почему проект обязан быть детерминированным, OSC на 1–3 кадра, Sync CHOP в пределах кадра и Frame Lock с Quadro Sync.
На одной машине с одной картой синхронизировать нечего. Если картинку делят несколько машин или карт, они должны показать один кадр в один момент. Насколько точно, решает площадка: на медленном контенте и разнесённых экранах пару кадров разницы никто не заметит; при быстром движении через стык соседних экранов заметна любая.
Ошибка складывается из двух частей. Машины должны посчитать одно и то же для одного номера кадра — тот же кадр видео, те же камеры, — это программная синхронизация. И мониторы разных машин обновляются не в фазе: при 60 Гц развёртки расходятся до 16,6 мс, до кадра, — это уже аппаратная.
Сначала проект делают детерминированным: одна команда или один набор каналов — одна картинка. Обычно всё ведут от одного номера кадра.
Feedback TOP и частицы считают кадр из прошлого. Машина пропустила кадр — через несколько секунд у неё своя картинка. Такое считают на одной машине и раздают видео либо гоняют всех без Realtime на строго одинаковых входах.
| Уровень | Чем | Точность |
|---|---|---|
| Слабая | Touch In/Out, потоки с очередями | Непрерывность, без точности кадра |
| Средняя | OSC Out CHOP или DAT с номером кадра или таймкодом | 1–3 кадра |
| Жёсткая программная | Sync In и Sync Out CHOP | В пределах кадра; Pro |
| Жёсткая + аппаратная | Sync-операторы, Hardware Frame Lock, Quadro Sync | Кадр в кадр и в фазе |
Без Pro идеала нет, но 1–3 кадра даёт OSC: ведущий рассылает номер кадра,
остальные по нему встают, по multicast и с выключенным Queued у OSC In
CHOP — OSC. Тот же уровень даёт общий LTC на всех машинах —
Таймкод. Большинству проектов этого хватает.
Sync In и Sync Out CHOP
Сервер с Sync Out ждёт, пока все клиенты с Sync In досчитают кадр, и пускает следующий; каналы на входе Sync Out приезжают клиентам вместе с ним. У клиентов Realtime выключен — частоту задаёт сервер, мониторы везде на одной частоте, адрес multicast и порт общие. Info DAT на Sync Out показывает каждого клиента — машину, файл, сколько раз его ждали.
Клиента, который подряд не отвечает, сервер перестаёт ждать до первого
ответа, Ban Clients исключает ненадёжного насовсем, Clear Stats
прощает всех. Клиент теряет кадры — растут timeout_consecutive на
сервере или sync_incompletes в Info CHOP клиента, и помогает больший
Timeout. Сервер на машине рендера — номер кадра в одном COMP со своим
временем, рендер в другом, и рендер читает Sync In в том же файле.
Аппаратная
Массивы экранов с быстрым контентом, LED-стены из панелей. Профессиональные NVIDIA и плата Quadro Sync шлейфом к карте в каждом компьютере; для Frame Lock через Window COMP требования называют ещё AMD S400.
Genlock ставит развёртки в фазу — от одной из карт или от house sync. Включается в панели NVIDIA (Synchronize Displays) или утилитой QSync, нужен V-Sync, Pro не нужен. Hardware Frame Lock меняет кадр на всех выходах, только когда готовы все: запнулся один — ждут все, и двух разных кадров на холсте не бывает. Это Pro и минус к производительности, его включают, когда без него никак. С ветки 2025.30000 Frame Lock делают на Direct Display Out TOP — путь через Window COMP устарел и плохо переносит смену окон и режимов, Несколько экранов.
По документации: дисплеи на одном EDID, проще всего одной модели;
в панели NVIDIA V-Sync «Вкл.» или «по приложению», в Synchronize Displays
сервер на этой системе и нужные дисплеи; на машине с несколькими картами —
процесс на карту (Железо). Процессы стартуют
с выключенными Direct Display Out с включённым Hardware Frame-Lock,
и канал через Sync Out и Sync In включает выходы везде разом, с Timeout
5 секунд. После старта сервер можно опустить до секунды, клиенты остаются
высокими.
Одна машина теряет кадры — теряют все, догнать ей нечем. Поэтому ставят большие таймауты и подбирают одинаковые по железу и нагрузке машины.
TDSynchro в палитре — каркас «сервер рендерит холст, клиенты мэппят свой кусок»: куски уходят по SDI или NDI с номером кадра, клиенты кэшируют и показывают нужный. Документации на большинство его компонентов пока нет, на разбор нужно время.
Нашли в статье ошибку, устаревшее или непонятное место?