К содержанию
fohbook/ TouchDesigner
профи

Репликатор и генерация сети

Когда узлов должно быть много и одинаковых: Replicator COMP, клоны и построение сети скриптом.

Двадцать одинаковых блоков руками — это двадцать мест, где вы забудете внести правку. Правильный ответ — один мастер и механизм размножения.

Replicator COMP

Replicator COMP создаёт копии компонента-мастера по строкам таблицы.

Как настроить:

  1. Мастер — компонент, который надо размножить (Master Operator).
  2. Таблица — Table DAT со строкой на каждую копию (Template DAT Table).
  3. Replicator создаёт клоны, называя их по значению из таблицы.

Каждая копия — клон мастера: правите мастер, меняются все.

Как копия узнаёт свои данные

Через колбэк репликатора:

def onReplicate(comp, allOps, newOps, template, master):
    for c in newOps:
        row = template.row(c.digits)   # или по имени
        c.par.Universe = int(row[1].val)
        c.par.Address  = int(row[2].val)
        c.nodeY = -150 * c.digits
    return

или выражением внутри мастера, опирающимся на me.digits и таблицу — Ссылки.

Что размножают

Что Таблица описывает
Экраны и выходы Разрешение, положение, монитор
Слои композиции Источник, режим наложения, прозрачность
Приборы света Юниверс, адрес, тип — Патч
Сцены шоу Файл, длительность, переход
Панели интерфейса Подпись, диапазон, адрес параметра

Смысл один: структура проекта описывается данными, а не рисуется руками. Добавить экран — это строка в CSV, а не полчаса в сетевом редакторе.

Генерация скриптом

Когда репликатора мало, сеть строят кодом:

parent().op('gen').destroyChildren()   # аккуратно: удаляет всё внутри
for i, row in enumerate(op('table1').rows()[1:]):
    n = parent().op('gen').copy(op('master'))
    n.name = f'unit_{row[0].val}'
    n.nodeY = -150 * i
    n.par.Address = int(row[2].val)

Правила безопасности:

  • генерируйте в отдельный контейнер, чтобы destroyChildren() не снёс лишнего;
  • запускайте по кнопке (Pulse-параметр), а не на каждом кадре;
  • сохраняйте результат в проект осознанно: сгенерированная сеть уедет в .toe и на площадке уже не будет пересобираться.
Не генерируйте сеть во время шоу

Создание и удаление узлов — дорогая операция, которая может занять десятки кадров. Всё, что можно построить заранее, строится при загрузке проекта, а не в момент, когда зритель смотрит на экран.

Таблица — источник правды

Держите одну таблицу на проект, из которой растёт всё: экраны, приборы, сцены. Тогда «сколько у нас выходов» — это вопрос к файлу, а не к памяти разработчика.

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