English | Mandarin | French | Spanish | Italian
Начиная с версии vvvv beta22, один клиент может управляться несколькими серверами. Подробнее об этом в разделе MultiBoygrouping, но сначала внимательно прочитайте все, что касается базовых настроек сети:
Обычно бойгруппа состоит из одного сервера и любого количества клиентов, подключенных по локальной сети (ethernet). Сейчас конечно лучше использовать гигабитные подключения, но мы начинали делать бойгруппы в vvvv еще когда 100baseT были в топе.
Простейшая группа состоит из одного сервера и одного клиента. В таком случае вы даже можете использовать полноэкранный режим на сервере как один из экранов всей инсталляции. Однако, тут все зависит от сложности ваших патчей. Часто сервер работает чуть медленнее клиентов, потому что выполняет гораздо большее количество операций и расчетов.
Как правило, хорошая структура папок для проекта в 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
На сервере запустите vvvv с параметром /server Параметры командной строкии обратите внимание, что в этом режиме вкладка vvvv на панели задач обозначается как SERVER! .
В этом же параметре вы можете дополнительно задать канал ip по которому бойгрупп будет работать, например:
vvvv.exe /server 192.168.0.255Это полезно, когда ваш сервер подключен к нескольким сетевым устройствам. Если канал ip не установлен, будет использоваться устройство по умолчанию в windows.
Чтобы указать серверу, с какими клиентами работать, создайте нод Boygroup (VVVV Server). К пину Clients подключите спред с IP-адресами ваших клиентов. Скорее всего, ваш патч будет выглядеть примерно так:
Помните, что нод Boygroup выводит спред значений-индикаторов состояния указанных клиентов. Если все установлено верно, через несколько секунд (<10) после запуска клиентов, они должны быть отмечены как включенные.
Когда vvvv запущен в режиме сервера, сочетание клавиш CTRL+B позволяет запускать отдельные ноды в режиме бойгруппы. Такие ноды отмечены синим цветом, что означает, что они (и их значения) дублируются на всех активных клиентах (даже если вы не видите их в клиентских патчах).
Скорее всего вы хотите открыть в бойгруппе ноды Renderer. Обратите внимание, что vvvv автоматически группирует некоторые соседние ноды. Это происходит потому, что некоторые связанные ноды (например трансформы, текстуры, аудио, видео, слои и т.п..) должны быть указаны по обе стороны сети. Примите это как данность, тем более, что все происходит автоматически и не требует дополнительной работы от вас.
В то же время, нужно понимать, что не все происходит автоматически, и для достижения лучших результатов, какие-то ноды вы должны группировать вручную. Тут нет строгих правил, типа "добавь в бойгруппу все, что видишь" или "чем меньше нодов в бойгруппе тем лучше".
Вместо этого нужно помнить, что все данные передающиеся между сгруппированными (синими) и обычными (серыми) нодами, так же передаются по сети в каждый момент времени (конечно, только когда данные изменяются). Поэтому нужно следить за тем, чтобы в таких нодах не было слишком больших спредов, и стараться избегать нодов, создающих большие спреды в бойгруппах.
Посмотрим на 3 типичных сценария, с которыми вы столкнетесь в процессе создания патчей для бойгруппы:
Понимание того, какие ноды лучше ставить в бойгруппу, требует немного практики, но в процессе вы вряд ли можете сильно ошибиться. Если ваши данные приходят медленно или не стабильно, попробуйте группировать разные сочетания нодов или используйте нодDamper (Animation).
Мосты это связи между серыми и синими нодами, т.е. связи, передающие данные по сети.
В ноде BoyGroup (VVVV Server) есть два выходных пина, в которых отображается информация о мостах
Активные мосты (Active bridges) те, которые передают данные непосредственно в текущий момент времени.
Отображение мостов предназначено для облегчения отладки патчей. Это помогает вам увидеть сколько точно связей передает данные к клиентам.
Midi-контроллеры занимают много данных и создают много мостов.
kalle нашел обходной путь для уменьшения задержки при передаче данных :
чтобы получать значения с midi-контролееров пользуйтесь нодом DMX (Network Artnet Sender).
чтобы распределить эти значения на клиентов, используйте в бойгруппе нод DMX (Network Artnet Receiver) (в сочетании с GetSlice (Spreads) ).
Преимущества:
это решение так же подходит для передачи данных Audio FFT для всех серверов и клиентов.
подробнее см. BoyGrouping.UserTutorials
Если в пине 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. Что, конечно, может и не быть проблемой (в зависимости от задач вашего патча).
До сих пор все клиенты выполняли все операции одинаково и одновременно, что хорошо, но не слишком полезно. Представим Джастина, Ланса, ДжейСи, Джоа и Криса исполняющих одни и те же танцевальные движения, в одном и том же месте на сцене. Хотя это потенциально красиво, это просто не возможно в ограниченном 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.
Это сочетание клавиш работает только в режиме сервера. Запустите vvvv с параметром /server, чтобы активировать бойгруппинг.
Да. Очень даже возможно. Решается проблема достаточно просто: вместо использования 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
anonymous user login
~2d ago
~2d ago
~9d ago
~11d ago
~13d ago
~16d ago
~16d ago
~24d ago
~30d ago
~30d ago