Switchboard プラグインの設定
次に示す手順に従ってプラグインの設定を変更します。
- Unreal Editor のメイン メニューから [Edit (編集)] > [Project Settings (プロジェクト設定)] を選択して、[Project Settings (プロジェクト設定)] ウィンドウを開きます。
- [Project Settings (プロジェクト設定)] ウィンドウで、[Plugin] セクションの [Switchboard] を選択します。
| パラメータ | 説明 |
|---|---|
| Switchboard | |
| Python Interpreter Path | Switchboard が使用するデフォルト バージョンは Python 3.7.7 です。別のバージョンの Python を使用する場合は、マシン上の別の Python インタープリタを指すようにこのフィールドを変更します。 |
| Switchboard Path | Switchboard の Python ファイルがある場所。 |
| Commandline Arguments | 現在、Switchboard はコマンドライン引数に対応していません。 |
| Listener | |
| Listener Path | SwitchboardListener の実行可能ファイルがある場所。 |
| Listener Commandline Arguments | SwitchboardListener には次の引数を指定します。
|
| OSC | |
| Default Switchboard OSC Listener | Switchboard には Take Recorder を使用できる OSC Listener が必要です。詳細は Take Recording with Switchboard を参照してください。 |
Switchboard の設定
- プロジェクトの初期設定時に追加した値など、すべてのデバイス プラグインに共通する設定は [Settings] パネルの上部にあります。
- デバイスを追加すると、そのデバイスの設定が設定パネルに追加されます。
- 一般設定の一部はデバイス設定にも存在するため、必要に応じてデバイスごとに値をオーバーライドできます。
- 特定のデバイスで設定をオーバーライドすると、異なる背景色で表示されます。このオーバーライドを維持する限り、そのデバイスの該当設定はグローバルな設定を変更した後も維持されます。
次のセクションでは [Settings] パネルで変更できる設定をすべて説明します。
| パラメータ | 説明 |
|---|---|
| IP Address | Switchboard で実行中のマシンと、内部 OSC サーバーの IP アドレス。Switchboard で実行中のコンピュータがネットワーク コントローラーを複数持つ場合は、ここでアドレスを変更します。 |
| Transport Path | 現在、Switchboard では使用しません。 |
プロジェクト設定
| パラメータ | 説明 |
|---|---|
| Project Name | Switchboard のプロジェクト名。設定とデバイスを保存するファイル名の基礎として使用します。 |
| UProject | UE のプロジェクト ファイルに対するローカル パス。 |
| Engine Dir | Unreal Engine ディレクトリに対するローカル パス。 |
| Build Engine | Switchboard でエンジンをソースからビルド可能にするフラグ。 |
| Map Path | Switchboard の [Level] ドロップダウンに表示する、 [Content (コンテンツ)] フォルダからマップへの相対パス。 |
| Map Filter | [Level] ドロップダウンに表示するマップを制限するファイル フィルター。 |
| OSC | |
| Server Port | Switchboard で OSC サーバーがリッスンするポート。 |
| Client Port | Unreal Editor で指定した OSC クライアントのポート。 |
| Source Control (ソース コントロール) | |
| P4 Project Path | UProject で指定した Unreal プロジェクトの Perforce デポ パス。指定する必要があるのは UProject ファイルを含むデポ フォルダのみです。 |
| P4 Engine Path | この P4 Engine Path 設定は、プロジェクトだけでなく、エンジンをソースからビルドする場合にのみ必須となります。詳細は「Syncing and Building」を参照してください。 |
| Workspace Name | デポ プロジェクト パスにマップする Perforce ワークスペース名。 |
マルチユーザー サーバ設定
| パラメータ | 説明 |
|---|---|
| Server Name | 完全なサーバー名を作成する際にプロジェクト名に付加する名前。 |
| Command Line Args | マルチユーザー サーバーの実行可能ファイルに渡す引数 (オプション)。 |
| Auto Join | このオプションを有効化すると、それぞれの Unreal や nDisplay デバイスを自動でマルチユーザー サーバーに参加させます。 |
| Clean History | 引数 -ConcertClean をサーバーに渡して、サーバー セッションの作業ディレクトリを起動時にクリーンアップします。 |
| Auto Launch | このオプションを有効化すると、Unreal や nDisplay デバイスの初回起動時にマルチユーザー サーバーを起動しkます。このサーバーは常に Switchboard と同じデバイスで実行されます。 |
Unreal デバイスの設定
| パラメータ | 説明 |
|---|---|
Is Recording Device |
このデバイスの種類がシーケンスをレコーディングする場合、このオプションを有効化する。 |
| Buffer Size | SwitchboardListener に接続したソケット クライアントの内部バッファ サイズ。 |
| Command Line Arguments | Unreal の起動時に渡するコマンドライン引数 (オプション)。 |
ExecCmds |
|
Listener Port |
Listener がリッスンするポート番号。デフォルト ポートは「2980」。 |
Roles Filename |
Virtual Production Role を含む .ini ファイルの名前。 |
Stage Session ID |
Stage Monitor プロバイダとモニターをグループ化する ID。セッション ID が異なるインスタンスは Stage Monitor で相互に参照はできません。 |
| UE4 Editor filename | Unreal Editor の実行可能ファイルの名前。 |
Number of GPUs |
GPU が複数ある場合にデバイスで使用する数。 |
| Instance Settings (インスタンス設定) | |
IP address |
SwitchboardListener がリッスンするリモート アドレス。 |
Roles |
「Roles.ini」ファイルが提供する対象から Virtual Production Role を選択するためのドロップダウン メニュー。 |
| Is Recording Device | このデバイスをレコーディングに使用するかどうかをオーバーライドする。 |
| Command Line Arguments | コマンドライン引数 (オプション) をオーバーライドする。 |
ExecCmds |
Unreal の exec コマンドをオーバーライドします。 |
Number of GPUs |
使用する GPU 数をオーバーライドします。 |
Engine Directory |
エンジンに対するローカル パスをオーバーライドします。 |
uProject Path |
Uproject ファイルに対するローカル パスをオーバーライドします。 |
KiPro デバイスの設定
| パラメータ | 説明 |
|---|---|
Is Recording Device |
このデバイスの種類がシーケンスをレコーディングする場合、このオプションを有効化する。 |
| IP address | KiPro Web サーバーのアドレス。 |
| Auto Play After Stop | このオプションを有効化すると、レコーディングが完了した時に自動で再生します。 |
Live Link Face
| パラメータ | 説明 |
|---|---|
Is Recording Device |
このデバイスの種類がシーケンスをレコーディングする場合、このオプションを有効化する。 |
| IP address | 現在、Switchboard では使用しません。 |
nDisplay デバイスの設定
| パラメータ | 説明 |
|---|---|
| nDisplay Config File | .cfg 形式と JSON 形式の両方をサポートします。 |
| Use All Available Cores | このオプションを有効化するとコアをすべて使用します。 |
| Texture Streaming | テクスチャ ストリーミングを切り替えます。 |
| Render API | DirectX11 と DirectX12 のオプションから選択します。 |
| Render Mode | nDisplay レンダリング モードを選択できます。 |
| Extra Cmd Line Args | 起動時に nDisplay に渡すコマンドライン引数 (オプション)。 |
ExecCmds |
|
Number of GPUs |
GPU が複数ある場合にデバイスで使用する数。 |
Listener Port |
Listener がリッスンするポート番号。デフォルト ポートは「2980」。 |
Roles |
「Roles.ini」ファイルが提供する対象から Virtual Production Role を選択するためのドロップダウン メニュー。 |
Stage Session ID |
Stage Monitor プロバイダとモニターをグループ化する ID。セッション ID が異なるインスタンスは Stage Monitor で相互に参照はできません。 |
nDisplay シーン ノードごとの設定。
| パラメータ | 説明 |
|---|---|
IP address |
SwitchboardListener がリッスンするリモート アドレス。 |
Roles |
「Roles.ini」ファイルが提供する対象から Virtual Production Role を選択するためのドロップダウン メニュー。 |
| Extra Cmd Line Args | コマンドライン引数 (オプション) をオーバーライドします。 |
| ExecCmds | nDisplay の exec コマンドをオーバーライドする |
Number of GPUs |
使用する GPU 数をオーバーライドします。 |
Engine Directory |
エンジンに対するローカル パスをオーバーライドします。 |
uProject Path |
Uproject ファイルに対するローカル パスをオーバーライドします。 |
Shogun デバイスの設定
| パラメータ | 説明 |
|---|---|
Is Recording Device |
このデバイスの種類がシーケンスをレコーディングする場合、このオプションを有効化する。 |
| IP Address | Shogun を実行するデバイスのアドレス。 |
| Save Path | Shogun キャプチャ フォルダのパス。 |
SoundDevices デバイスの設定
| パラメータ | 説明 |
|---|---|
Is Recording Device |
このデバイスの種類がシーケンスをレコーディングする場合、このオプションを有効化する。 |
| IP Address | SoundDevices Web サーバーのアドレス。 |
Switchboard のデバイス プラグインを独自に作成する
プロジェクトのニーズと使用するデバイスに応じて、Switchboard のデバイス機能に対して追加や拡張を行うことができます。このセクションでは、独自のデバイス プラグインを Python で作成する方法を説明します。C++ のナレッジがあれば、リスナーの拡張により受信するメッセージの種類を増やすことができます (ここでは説明しません)。
次の手順では、たたき台として Switchboard に対応した新しいデバイス プラグインである SampleDevice を作成する方法について説明します。
- このデバイス プラグインが Switchboard の読み込み時に検出されるように、命名規則「
<plugin_name>\plugin_<plugin_name>.py」に従ってフォルダと Python ファイルを「\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\」配下に作成します。- SampleDevice プラグインの場合は以下のファイルを作成します。
\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\sampledevice\plugin_sampledevice.py。
- SampleDevice プラグインの場合は以下のファイルを作成します。
- 「
\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\device_base.py」で定義されたDeviceクラスを拡張して「plugin_sampledevice.py」ファイルとます。- 「
device_base.py」からDeviceをインポートします。 Deviceを継承して、新しいクラスDeviceSampleDeviceを作成します。-
「
switchboard/switchboard_logging.py」からエラー報告に使用するLOGGERをインポートします。from switchboard.devices.device_base import Device from switchboard.switchboard_logging import LOGGER
class DeviceSampleDevice(Device):` def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
このファイルを Switchboard から検出できることを確認します。Switchboard を起動して [Add Device] ドロップダウン メニューを展開します。一覧に SampleDevice が表示されます。

- 「
- SampleDevice を Switchboard に追加するだけでは、ウィジェットがビューに作成されません。「
plugin_sampledevice.py」でDeviceWidgetを拡張して SampleDevice ウィジェットを作成します。- 「
device_widget_base.py」からDeviceWidgetをインポートします。 -
DeviceWidgetを継承して、新しいクラスDeviceWidgetSampleDeviceを作成します。from switchboard.devices.device_base import Device from switchboard.devices.device_widget_base import DeviceWidget from switchboard.switchboard_logging import LOGGER
class DeviceSampleDevice(Device): def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
class DeviceWidgetSampleDevice(DeviceWidget): def init(self, name, device_hash, ip_address, icons, parent=None): super().init(name, device_hash, ip_address, icons, parent=parent)
このウィジェットが Switchboard に表示されることを確認します。Switchboard を起動して SampleDevice を追加します。最小限の SampleDevice ウィジェットがビューに表示されます。

- 「
AddDeviceDialogを継承する新しいクラスを作成し、それをDeviceSampleDeviceクラスのスタティック変数add_device_dialogに割り当てることにより、新しい SampleDevice を追加する時にカスタム ダイアログを作成します。- 「
device_widget_base.py」からAddDeviceDialogをインポートします。 - PySide2 から Qt モジュールをインポートします。
AddDeviceDialogを継承する新しいクラスAddSampleDeviceDialogを作成し、基本クラスのコンストラクタ呼び出しで device_type パラメータに “SampleDevice” を設定します。- この新しいクラスのコンストラクタで、QLineEdit テキスト フィールドをダイアログに追加します。
-
DeviceSampleDeviceのadd_device_dialogスタティック変数を、この新しいクラスでオーバーライドします。from switchboard.devices.device_base import Device from switchboard.devices.device_widget_base import AddDeviceDialog, DeviceWidget from switchboard.switchboard_logging import LOGGER
from PySide2 import QtWidgets, QtGui, QtCore
class AddSampleDeviceDialog(AddDeviceDialog): def init(self, existing_devices, parent=None): super().init(device_type="SampleDevice", existing_devices=existing_devices, parent=parent)
# Create QTWidgets to add to the form self.additional_text_field = QtWidgets.QLineEdit(self)
# Append the new options to the QTWidgets.QFormLayout object defined in the parent class self.form_layout.addRow("Additional Text", self.additional_text_field)
class DeviceSampleDevice(Device): # Override the add device dialog object associated with the device plugin add_device_dialog = AddSampleDeviceDialog
def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
class DeviceWidgetSampleDevice(DeviceWidget): def init(self, name, device_hash, ip_address, icons, parent=None): super().init(name, device_hash, ip_address, icons, parent=parent) `
この新しいデバイス ダイアログが Switchboard に表示されることを確認します。Switchboard を起動して SampleDevice を追加します。追加のテキスト フィールドがダイアログに表示されます。

- 「
- Switchboard の右側にデバイスのウィジェットを配置し、他の拡張ダイアログにタブを追加して、より多くの情報を共有できます。基本クラス
Deviceのクラス メソッドplug_into_uiをオーバーライドして、このタブを作成します。QtWidgets.QWidgetを継承して、新しいクラスSampleDeviceTabViewを作成します。DeviceSampleDeviceにクラス メンバーtab_viewを作成して、このウィジェットのインスタンスを保持します。-
DeviceSampleDeviceのクラス メソッドplug_into_uiをオーバーライドし、新しいクラスSampleDeviceTabViewでtab_viewを初期化します。from switchboard.devices.device_base import Device from switchboard.devices.device_widget_base import AddDeviceDialog, DeviceWidget from switchboard.switchboard_logging import LOGGER
from PySide2 import QtWidgets, QtGui, QtCore
class AddSampleDeviceDialog(AddDeviceDialog): def init(self, existing_devices, parent=None): super().init(device_type="SampleDevice", existing_devices=existing_devices, parent=parent)
# Create QTWidgets to add to the form self.additional_text_field = QtWidgets.QLineEdit(self)
# Append the new options to the QTWidgets.QFormLayout self.form_layout object defined in the parent class self.form_layout.addRow("Additional Text", self.additional_text_field)
class DeviceSampleDevice(Device): add_device_dialog = AddSampleDeviceDialog # Override the default dialog for the plugin tab_view = None
def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
@classmethod def plug_into_ui(cls, menubar, tabs): ''' Implementation of base class function that allows plugin to inject UI elements. '''
if not cls.tab_view: cls.tab_view = SampleDeviceTabView(parent=tabs)
tabs.addTab(cls.tab_view, 'SampleDevice Tab')
class DeviceWidgetSampleDevice(DeviceWidget): def init(self, name, device_hash, ip_address, icons, parent=None): super().init(name, device_hash, ip_address, icons, parent=parent)
class SampleDeviceTabView(QtWidgets.QWidget): def init(self, parent): QtWidgets.QWidget.init(self, parent)

ここまでの手順で、Switchboard の新しいデバイス プラグインの作成方法を説明しました。より高度なサンプルについては、Switchboard の nDisplay デバイス プラグインを参照してください。