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

DMX Map DAT: карта юниверсов

Таблица того, что на самом деле уходит в каждый юниверс из DMX Fixture POP и DMX Out POP. Фильтры, проверка перед шоу и скрипт-заменитель для проекта на CHOP.

Ветка вашего пульта:1 фрагмент статьи для версий новее вашей
Быстрый выбор:
Появилось в 2025.30000 · в вашей версии этого нет

У света появились свои операторы: DMX Fixture POP, DMX Out POP, DMX Map DAT и Pan Tilt CHOP.

DMX Map DAT пришёл в ветке 2025.30000 вместе с DMX Fixture POP: берёт DMX Fixture POP или DMX Out POP и выводит их юниверсы таблицей.

Главная проблема патча — пересечение адресов. Два прибора на одних каналах мешают друг другу, и выглядит это как «прибор глючит». Пишут два Fixture POP в один канал — DMX Out POP предупреждает, а карта показывает, где.

К каждому DMX Out POP карта уже пристыкована, свою ставят отдельно и указывают оператор в DMX Fixture/Out POP.

Параметр Что делает
Net Filter, Subnet Filter, Universe Filter, Network Address Filter Нужные юниверсы по шаблону
Exclude Unused Channels Выключен — все 512 каналов, включён — только занятые
Update Value Значения вживую или последнее
Active Выключенный держит последнюю раскладку

По сути это окно патча, как на консоли, и нужно оно и при сборке, и при отладке.

Перед шоу: ни одного канала на двух приборах и ни одного предупреждения на DMX Out POP; ничего не ушло в незапланированный юниверс; совпадение с патчем консоли, если она есть, Патч и маршрутизация; и границы юниверсов. Прибор не может начаться в одном юниверсе и кончиться в другом, а DMX Fixture POP с Quantize Universe = Off именно так его и разрежет — By Fixture перенесёт его целиком.

На ветках до 2025.30000 карту делают сами. Проще всего скрипт по таблице патча: fixtures со столбцами id, universe, address, type и ваша footprint(), возвращающая число каналов профиля.

t = op('fixtures')
used = {}
for i in range(1, t.numRows):
    u = int(t[i, 'universe'])
    a = int(t[i, 'address'])
    fid = t[i, 'id'].val
    for ch in range(a, a + footprint(t[i, 'type'].val)):
        if (u, ch) in used:
            debug('конфликт', u, ch, used[(u, ch)], fid)
        used[(u, ch)] = fid

Пересечения можно вывести и на служебную панель — двадцать минут, которые окупаются на первом же конфликте.

Адреса — пункт чек-листа

Рядом с «сеть поднялась» и «приборы отвечают». Конфликт адресов ищут часами, а находят за секунду в правильном месте.

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

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