» Базовые настройки Boygroup
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Базовые настройки Boygroup

English | Mandarin | French | Spanish | Italian

The original english version of this page is newer and may contain information this translation does not have! Click here to view the english version.

Бойгрупинг (Boygrouping) это встроенная архитектура клиент-сервер для vvvv. Она позволяет управлять любым количеством компьютеров (клиентов) с одного сервера. Когда вы редактируете патчи только на сервере, vvvv автоматически вносит изменения в патчи на всех активных клиентах n'sync <!-- поэтому это и называется 'boygrouping'-->. Самое Самое частое применение бойгрупп это мульти-экранные инсталляции и широкие панорамные проекции.

Начиная с версии vvvv beta22, один клиент может управляться несколькими серверами. Подробнее об этом в разделе MultiBoygrouping, но сначала внимательно прочитайте все, что касается базовых настроек сети:

Настройка "железа"

Обычно бойгруппа состоит из одного сервера и любого количества клиентов, подключенных по локальной сети (ethernet). Сейчас конечно лучше использовать гигабитные подключения, но мы начинали делать бойгруппы в vvvv еще когда 100baseT были в топе.

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

  • Объедините два или более компьютеров в локальную сеть через ethernet.
  • Настройте IP-адреса (например, 192.168.0.1, 192.168.0.2 и т.д)
  • Определите какой из компьютеров будет управляющим сервером
  • Следуйте дальнейшим инструкциям

Структура папок

Как правило, хорошая структура папок для проекта в vvvv выглядит следующим образом:

 
C:\MYPROJECT\patches C:\MYPROJECT\resources C:\MYPROJECT\vvvv

В бойгрупп-проектах нужно открыть сетевой доступ (share) ко всей папке \MYPROJECT и в точности повторить эту структуру на всех клиентах. При этом вам не обязательно копировать патчи (файл.v4p) в клиентские папки \patches, так как они появятся автоматически при запуске сервера! Но не забудьте скопировать файлы .fx или .dll в соответствующие папки клиентов. В принципе, не проблема если на клиентах будет полная копия всего проекта с сервера, главное, чтобы вы понимали, что в бойгруп используются только данные патчей с сервера.

Бойгрупинг не передает по сети сложные ресурсы (текстуры, видео, шейдеры, ..), но только простые данные (числа, тексты, цвета, списки). Поэтому все пути к ресурсам и дополнительным файлам должны быть на клиентах точно такими же, как они прописаны на сервере. Синхронизировать структуру файлов на сервере и клиентах можно с помощью дополнительных инструментов. Смотрите RemoterSA или kalles file modules.

Подготовка клиентов

Подготовка патчей на клиентах очень прозрачна и проста. По сути вообще никак не нужно подготавливать патчи на клиентах. Единственное, что вы должны сделать, запустить vvvv.exe с параметром /client [ServerIP] Параметры командной строки например:

 
vvvv.exe /client 192.168.0.100
  • Помните, что 192.168.0.100 это ip-адрес сервера. Вы увидите, что vvvv работает в режиме клиента по дополнительному окну патча с заголовком //CLIENT of 192.168.0.100

Подготовка сервера

На сервере запустите vvvv с параметром /server Параметры командной строкии обратите внимание, что в этом режиме вкладка vvvv на панели задач обозначается как SERVER! .

В этом же параметре вы можете дополнительно задать канал ip по которому бойгрупп будет работать, например:

 
vvvv.exe /server 192.168.0.255
Это полезно, когда ваш сервер подключен к нескольким сетевым устройствам. Если канал ip не установлен, будет использоваться устройство по умолчанию в windows.

Чтобы указать серверу, с какими клиентами работать, создайте нод Boygroup (VVVV Server). К пину Clients подключите спред с IP-адресами ваших клиентов. Скорее всего, ваш патч будет выглядеть примерно так:

Помните, что нод Boygroup выводит спред значений-индикаторов состояния указанных клиентов. Если все установлено верно, через несколько секунд (<10) после запуска клиентов, они должны быть отмечены как включенные.

Патчи в Boygroup

Синие ноды

Когда vvvv запущен в режиме сервера, сочетание клавиш CTRL+B позволяет запускать отдельные ноды в режиме бойгруппы. Такие ноды отмечены синим цветом, что означает, что они (и их значения) дублируются на всех активных клиентах (даже если вы не видите их в клиентских патчах).

Скорее всего вы хотите открыть в бойгруппе ноды Renderer. Обратите внимание, что vvvv автоматически группирует некоторые соседние ноды. Это происходит потому, что некоторые связанные ноды (например трансформы, текстуры, аудио, видео, слои и т.п..) должны быть указаны по обе стороны сети. Примите это как данность, тем более, что все происходит автоматически и не требует дополнительной работы от вас.

В то же время, нужно понимать, что не все происходит автоматически, и для достижения лучших результатов, какие-то ноды вы должны группировать вручную. Тут нет строгих правил, типа "добавь в бойгруппу все, что видишь" или "чем меньше нодов в бойгруппе тем лучше".

Вместо этого нужно помнить, что все данные передающиеся между сгруппированными (синими) и обычными (серыми) нодами, так же передаются по сети в каждый момент времени (конечно, только когда данные изменяются). Поэтому нужно следить за тем, чтобы в таких нодах не было слишком больших спредов, и стараться избегать нодов, создающих большие спреды в бойгруппах.

Посмотрим на 3 типичных сценария, с которыми вы столкнетесь в процессе создания патчей для бойгруппы:

  • Отправляющий нод (серый) существует только на сервере, в то время как получающий нод (синий) дублируется на клиенте. Так как значение постоянно изменяется, оно передается по протоколу UDP в каждый момент времени. Протокол UDP не может гарантировать стабильную скорость передачи данных, поэтому вы заметите небольшую задержку или подергивания в анимации объектов. Поскольку в данном случае параметры анимации передаются от сервера к клиенту, правильно использовать Damper (Animation) в бойгруппе, как самый первый нод на клиенте.
  • Оба нода существуют на клиенте. Поэтому здесь нет данных, которые нужно передавать по сети. Эти ноды имеют локальную связь (на клиенте) и данные передаются независимо от протоколов, поэтому вы получаете плавную и правильную анимацию.
  • Отправляющий нод (синий) в бойгруппе, а получающий нод (серый) - нет. Здесь нет данных для передачи. На сервере вы всегда будете видеть локальные значения, потому что не возможно получать данные с клиентов.

Понимание того, какие ноды лучше ставить в бойгруппу, требует немного практики, но в процессе вы вряд ли можете сильно ошибиться. Если ваши данные приходят медленно или не стабильно, попробуйте группировать разные сочетания нодов или используйте нодDamper (Animation).

Мосты (Bridges)

Мосты это связи между серыми и синими нодами, т.е. связи, передающие данные по сети.

В ноде BoyGroup (VVVV Server) есть два выходных пина, в которых отображается информация о мостах

  • Bridge Count
  • Active Bridges

Активные мосты (Active bridges) те, которые передают данные непосредственно в текущий момент времени.

Отображение мостов предназначено для облегчения отладки патчей. Это помогает вам увидеть сколько точно связей передает данные к клиентам.

как правило, лучше чтобы мостов было не слишком много.
Совет:

Midi-контроллеры занимают много данных и создают много мостов.

kalle нашел обходной путь для уменьшения задержки при передаче данных :
чтобы получать значения с midi-контролееров пользуйтесь нодом DMX (Network Artnet Sender).
чтобы распределить эти значения на клиентов, используйте в бойгруппе нод DMX (Network Artnet Receiver) (в сочетании с GetSlice (Spreads) ).

Преимущества:

  • задержки заметно ниже (возможно в протоколе Artnet передача данных реализована лучше)
  • меньше аетивных мостов
  • вам даже не придется запускать эти патчи на сервере: возьмите еще один компьютер (какой-нибудь старый) и установите его только как "Device Server". очевидно, что это значительно улучшит производительность основного сервера, поскольку он больше не должен ждать данных о midi-событиях.

это решение так же подходит для передачи данных Audio FFT для всех серверов и клиентов.

подробнее см. BoyGrouping.UserTutorials

Предупреждения (Warnings)

Если в пине Warning нода BoyGroup (VVVV Server)вы видите что-то вроде

 msg too big for UDP; was sent via TCP: /4/14/139/ Scale XYZ

значит:

 /4/14/139

путь к пину

 Scale XYZ

указанный в id-нода по отношению к корневому патчу (ROOT).

так можно определить где именно в патче находится нод, отправляющий слишком большие значения для UDP, и проверить, действительно ли необходимо отправлять такие значения или вы можете оптимизировать ваш патч.

Отметим так же, что вы можете увеличить размер передаваемых пакетов UDP через Boygroup (VVVV Server). Но будьте осторожнее с этим. По моему опыту, чем больше размер пакета, тем выше вероятность потери пакетов при передачи по UDP. Что, конечно, может и не быть проблемой (в зависимости от задач вашего патча).

Идентификация клиентов (ClientID)

До сих пор все клиенты выполняли все операции одинаково и одновременно, что хорошо, но не слишком полезно. Представим Джастина, Ланса, ДжейСи, Джоа и Криса исполняющих одни и те же танцевальные движения, в одном и том же месте на сцене. Хотя это потенциально красиво, это просто не возможно в ограниченном 3-х мерном пространстве. Поэтому в бойгруппах представлена идентификация клиентов ClientID - единственный способ, определить разницу между клиентами (и сервером) с точки зрения патча.

Нод Boygroup (VVVV Client) показывает различные ID от 0 до количества клиентов – по 1 для каждого клиента. Порядок зависит от спреда IP-адресов, задаваемого вами в нодеBoygroup (VVVV Server). IP в сайсе 0 даст соответствующему клиенту ID 0, IP в слайсе 1 - клиент ID 1 и так далее. Обратите внимание, что для сервера нод Boygroup (VVVV Client) возвращает любое значение, которое вы установите во входе ServerID, и какое бы значение ID вы не установили для сервера, оно не скажется на клиентах. Изменение значения ID сервера позволяет имитировать действия клиента на сервере.

Простой пример приведен в патче

 girlpower\takethat.v4p. 

Здесь вы видите нод Boygroup (VVVV Client) в действии. В примере, он используется чтобы установить разные позиции камеры для разных клиентов.

Полноэкранный режим на клиентах

Обычный сценарий бойгруппы заключается в том, что вы хотите управлять патчем на сервере, в то время как рендеры клиентов работают в полноэкранном режиме. Для этого необходимо установить в Renderer пин Fullscreen = 1 на клиентах и = 0 на сервере. Единственный способ отделить действия сервера от действий клиентов (так же как клиентов друг от друга), это идентификация ClientID. На основании этого, вы можете задать в патче отдельное окно рендера для сервера и полноэкранный режим для рендеров клиентов. Примерно вот так:

Синхронное воспроизведение видео

см. tonfilm-VideoSync?

Управление клиентами

При работе с большим количеством клиентов, часто бывает необходимо запустить/остановить vvvv.exe или другой процесс на всех одновременно одним кликом на сервере. Или перезагрузить/выключить/включить по сети некоторые из клиентов или подключить VNC для отладки одного из них. Все эти и многие другие действия могут быть выполнены с нашим дополнительным инструментом: RemoterSA.

Также можно использовать нод Remote Shell RSh (Network). См. RSH HowTo.

FAQ

Почему не работает CTRL-B?

Это сочетание клавиш работает только в режиме сервера. Запустите vvvv с параметром /server, чтобы активировать бойгруппинг.

Похоже, что bangs иногда не отрабатываются на клиентах?!

  • "bang" режим клика в IOBox (Values).

Да. Очень даже возможно. Решается проблема достаточно просто: вместо использования bang между синим и серым нодами, постройте патч так, чтобы по сети передавалось измененное значение. В таком случае первый синий нод будет Change (Animation) чтобы преобразовать новое значение в искомый вами bang.

Детальное объяснение проблемы заключается в следующем: сервер и клиенты не синхронизированы такт в такт. В большинстве случаев клиенты работают быстрее сервера, который выполняет больше операций и сильнее загружен. Даже если bang отправлен с сервера, он может быть получен клиентом позже необходимого и проигнорирован. "Bang" это покадровое изменение значения до 1 с моментальным возвратом к 0 в следующем кадре. Если оба значения приходят одновременно (или позже), обрабатывается только последнее из них (т.е. 0) и действие не имеет результата.

Какие сетевые порты использует бойгруппа?

По умолчанию в vvvv установлена связь по протоколу TCP с портом 3333 для каждого клиента для передачи изменений структуры патча. Все изменяющиеся значения передаются по UDP с портом 3333. Вы можете изменить этот порт в ноде Boygroup (VVVV Server) в пине Network Port. Посните, что если вы изменили параметры порта на сервере, вы так же должны изменить порт на клиентах в параметре командной строки:

 /client 192.168.0.100:4444

дополнительно

см. Change Log to beta15

anonymous user login

Shoutbox

~2d ago

joreg: vvvvTv S0204 is out: Custom Widgets with Dear ImGui: https://youtube.com/live/nrXfpn5V9h0

~2d ago

joreg: New user registration is currently disabled as we're moving to a new login provider: https://visualprogramming.net/blog/2024/reclaiming-vvvv.org/

~9d ago

joreg: vvvvTv S02E03 is out: Logging: https://youtube.com/live/OpUrJjTXBxM

~11d ago

~13d ago

joreg: Follow TobyK on his Advent of Code: https://www.twitch.tv/tobyklight

~16d ago

joreg: vvvvTv S02E02 is out: Saving & Loading UI State: https://www.youtube.com/live/GJQGVxA1pIQ

~16d ago

joreg: We now have a presence on LinkedIn: https://www.linkedin.com/company/vvvv-group

~24d ago

joreg: vvvvTv S02E01 is out: Buttons & Sliders with Dear ImGui: https://www.youtube.com/live/PuuTilbqd9w

~30d ago

joreg: vvvvTv S02E00 is out: Sensors & Servos with Arduino: https://visualprogramming.net/blog/2024/vvvvtv-is-back-with-season-2/

~30d ago