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

Кэш и предзагрузка

Cache TOP держит прошлые кадры, Pre-Read и preload() готовят файл заранее, прогрев прячет от зрителя первые дорогие секунды.

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

Всё, что читается с диска или долго считается, должно быть готово до того, как понадобится. Иначе шоу дёргается ровно на переходе.

Cache TOP

Cache TOP складывает в видеопамять последние кадры входа, сколько задано в Cache Size, а Cache Select TOP достаёт их по индексу: 0 — текущий, −1 — предыдущий и так далее.

Задача Как
Задержка картинки на N кадров Cache + Cache Select с индексом −N
Эффект «шлейфа» Несколько Cache Select с разными индексами, сложить
Стоп-кадр Выключить Active у Cache — он перестанет принимать новые кадры
Замедление и проигрывание буфера Output Index у самого Cache с дробным значением и Interpolate Frames
Снимок пустой сцены Get One Image on Startup или разовая запись по Replace Pulse

Память считается в лоб: кадры × ширина × высота × каналы × байты. Сто кадров FullHD в 8-битном RGBA — около 830 МБ, и в видеопамять упереться легко.

Видеофайлы

Pre-Read Frames на странице Tune у Movie File In держит наготове распакованные кадры. Увеличивайте его, пока не пропадёт рывок в начале клипа и после перемотки, и не дальше: каждый кадр — память процессора.

Файл, который понадобится позже, открывает op('clipB').preload() — читает первые кадры, стараясь не мешать текущему воспроизведению, а op('clipB').isFullyPreRead сообщает, что всё готово. При запуске проекта Derivative советует вместо этого просто вызвать cook() у плеера.

Плейлист держится на том же: следующий клип уже открыт во втором Movie File In с выключенным Play, вывод идёт через Cross или Switch, и смена клипа — это движение параметра, а не открытие файла.

clipA ─┐
       ├─ cross ──▶ out
clipB ─┘

Пока играет A, скрипт ставит B на нужный кадр. Подробнее — Movie File In и Плейлист.

Прогрев

Первые кадры после запуска самые дорогие: компилируются шейдеры, читаются файлы, выделяется память. Поэтому инсталляция стартует с чёрным выводом, прогоняет все сцены и переходы невидимо, ждёт ровной частоты по каналам fps и droppedframes у Perform CHOP и только потом открывает картинку. Нейросети греют так же: первый проход модели всегда медленнее.

Память, а не только кадры

Perform CHOP отдаёт занятую видеопамять (gpumemused) и память процессора (cpumemused), Info CHOP на TOP — gpu_memory_used узла. Утечка видна как плавный рост памяти за часы, а падает инсталляция потом ночью.

Смена разрешения

Новое разрешение на входе заставляет узлы цепочки заново выделять видеопамять, и на шоу это может стоить рывка. Держите размер постоянным — Разрешение.

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

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