Choose your operating system:
Windows
macOS
Linux
Switchboard插件设置
按照下面的步骤修改插件的设置。
在 虚幻编辑器 的主菜单中,选择 编辑(Edit) > 项目设置(Project Settings) 可以打开 项目设置(Project Settings) 窗口。
在 项目设置(Project Settings) 窗口中,在 插件(Plugins) 部分中选择 Switchboard。
参数 |
说明 |
|
---|---|---|
Switchboard |
||
Python编译器路径(Python Interpreter Path) |
Switchboard的默认Python版本是Python 3.7.7。要使用Python的其他版本,请更改此字段以指向你机器上的Python编译器。 |
|
Switchboard路径(Switchboard Path) |
Switchboard Python文件的位置。 |
|
命令行参数(Commandline Arguments) |
Switchboard目前不允许使用任何命令行参数。 |
|
Listener |
||
Listener路径(Listener Path) |
SwitchboardListener可执行文件的位置。 |
|
Listener命令行参数(Listener Commandline Arguments) |
SwitchboardListener需要使用以下参数:
|
|
OSC |
||
默认Switchboard OSC Listener(Default Switchboard OSC Listener) |
Switchboard需要OSC Listener才能使用镜头试拍录制器。如需更多详细信息,请参见使用Switchboard录制试拍镜头。 |
Switchboard设置
对所有设备插件通用的设置位于 设置(Settings) 面板顶部,包括在初始项目设置期间添加的值。
在你添加设备之后,这些设备的设置将附加到设置面板。
部分一般设置在设备的设置中是重复的,因此必要时可以覆盖各个设备的值。
如果要在特定的设备中覆盖设置,将显示不同的背景颜色。只要覆盖位置正确,更改全局设置就不会导致设备中的此设置发生更改。
下面的部分介绍了所有可以在"设置"面板中修改的设置。
参数 |
说明 |
---|---|
IP地址(IP Address) |
运行Switchboard和内部OSC服务器的机器的IP地址。如果运行Switchboard的计算机上有多个网络控制器,请在此处更改地址。 |
传输路径(Transport Path) |
目前未在Switchboard中使用。 |
项目设置
参数 |
说明 |
|
---|---|---|
项目名称(Project Name) |
Switchboard项目的名称。将用作存储设置和设备的文件名的基础。 |
|
UProject |
UE项目文件的本地路径。 |
|
引擎目录(Engine Dir) |
虚幻引擎目录的本地路径。 |
|
构建引擎(Build Engine) |
用于在Switchboard中启用从源编译引擎的标记。 |
|
贴图路径(Map Path) |
从 Content 文件夹到贴图的相对路径,将显示在Switchboard中的 关卡(Level) 下拉菜单中。 |
|
贴图过滤器(Map Filter) |
用于限制哪些贴图出现在"关卡"下拉菜单中的文件过滤器。 |
|
OSC |
||
服务器端口(Server Port) |
要在Switchboard中侦听的OSC服务器的端口。 |
|
客户端端口(Client Port) |
虚幻编辑器中指定的OSC客户端的端口。 |
|
源功能按钮(Source Control) |
||
P4项目路径(P4 Project Path) |
Uproject中指定的虚幻项目的Perforce库路径。仅需要指定包含Uproject文件的库文件夹。 |
|
P4引擎路径(P4 Engine Path) |
仅当你计划根据源编译引擎(而非仅编译项目)时,才需要使用P4引擎路径设置。如果需要更多详细信息,请参见同步和编译。 |
|
工作区名称(Workspace Name) |
映射至库项目路径的Perforce工作区的名称。 |
多用户服务器设置
参数 |
说明 |
---|---|
服务器名称(Server Name) |
附加到项目名称的名称,用于创建完整的服务器名称。 |
命令行参数(Command Line Args) |
传递到多用户服务器可执行文件的可选参数。 |
自动加入(Auto Join) |
启用此选项,让每个虚幻或nDisplay设备自动加入多用户服务器。 |
清空历史记录(Clean History) |
将参数 |
自动启动(Auto Launch) |
启用此选项以在首次启动虚幻或nDisplay设备时启动多用户服务器。服务器始终在与Switchboard所在的同一设备上运行。 |
虚幻设备设置
参数 |
说明 |
|
---|---|---|
是录制设备(Is Recording Device) |
如果该设备类型即将用于录制序列,则启用此选项。 |
|
缓冲区大小(Buffer Size) |
连接到SwitchboardListener的套接字客户端的内部缓冲区大小。 |
|
命令行参数(Command Line Arguments) |
启动时传递至虚幻的可选命令行参数。 |
|
ExecCmds |
设置要在启动时作为命令行参数传递至虚幻的 |
|
Listener端口(Listener Port) |
Listener要侦听的端口号。默认端口为2980。 |
|
角色文件名(Roles Filename) |
包含虚拟制作角色的.ini文件的文件名。 |
|
舞台会话ID(Stage Session ID) |
用于对舞台监视器提供程序和监视器进行分组的ID。具有不同会话ID的实例在舞台监视器中对彼此不可见。 |
|
UE4编辑器文件名(UE4 Editor filename) |
虚幻编辑器可执行文件的文件名。 |
|
GPU数量(Number of GPUs) |
当设备上有多个GPU时使用的GPU数量。 |
|
实例设置(Instance Settings) |
||
IP地址(IP address) |
SwitchboardListener侦听的远程地址。 |
|
角色(Roles) |
支持选择角色.ini文件中提供的虚拟制作角色的下拉菜单。 |
|
是录制设备(Is Recording Device) |
覆盖以确定此设备是否用于录制。 |
|
命令行参数(Command Line Arguments) |
覆盖以获得可选命令行参数。 |
|
ExecCmds |
覆盖以获得虚幻的exec命令。 |
|
GPU数量(Number of GPUs) |
覆盖以获得要使用的GPU计数。 |
|
引擎目录(Engine Directory) |
覆盖以获得引擎的本地路径。 |
|
uProject路径(uProject Path) |
覆盖以获得uProject文件的本地路径。 |
KiPro设备设置
参数 |
说明 |
---|---|
是录制设备(Is Recording Device) |
如果该设备类型即将用于录制序列,则启用此选项。 |
IP地址(IP address) |
KiPro Web服务器的地址。 |
停止后自动播放(Auto Play After Stop) |
启用此选项可以在录制结束时自动播放。 |
Live Link Face
参数 |
说明 |
---|---|
是录制设备(Is Recording Device) |
如果该设备类型即将用于录制序列,则启用此选项。 |
IP地址(IP address) |
目前未在Switchboard中使用。 |
nDisplay设备设置
参数 |
说明 |
---|---|
nDisplay配置文件(nDisplay Config File) |
支持.cfg和JSON格式。 |
使用所有可用内核(Use All Available Cores) |
启用此选项以使用所有内核。 |
纹理流送(Texture Streaming) |
切换纹理流送。 |
渲染API(Render API) |
选项为DirectX11或DirectX12。 |
渲染模式(Render Mode) |
允许选择nDisplay渲染模式。 |
额外命令行参数(Extra Cmd Line Args) |
启动时传递至nDisplay的可选命令行参数。 |
ExecCmds |
设置要在启动时作为命令行参数传递至虚幻的 |
GPU数量(Number of GPUs) |
当设备上有多个GPU时使用的GPU数量。 |
Listener端口(Listener Port) |
Listener要侦听的端口号。默认端口为2980。 |
角色(Roles) |
支持选择角色.ini文件中提供的虚拟制作角色的下拉菜单。 |
舞台会话ID(Stage Session ID) |
用于对舞台监视器提供程序和监视器进行分组的ID。具有不同会话ID的实例在舞台监视器中对彼此不可见。 |
对于每个nDisplay场景节点:
参数 |
说明 |
---|---|
IP地址(IP address) |
SwitchboardListener侦听的远程地址。 |
角色(Roles) |
支持选择角色.ini文件中提供的虚拟制作角色的下拉菜单。 |
额外命令行参数(Extra Cmd Line Args) |
覆盖以获得可选的命令行参数。 |
ExecCmds |
覆盖以获得nDisplay的exec命令 |
GPU数量(Number of GPUs) |
覆盖以获得要使用的GPU计数。 |
引擎目录(Engine Directory) |
覆盖以获得引擎的本地路径。 |
uProject路径(uProject Path) |
覆盖以获得uProject文件的本地路径。 |
Shogun设备设置
参数 |
说明 |
---|---|
是录制设备(Is Recording Device) |
如果该设备类型即将用于录制序列,则启用此选项。 |
IP地址(IP Address) |
运行Shogun的设备的地址。 |
保存路径(Save Path) |
Shogun的捕获文件夹的路径。 |
SoundDevices设备设置
参数 |
说明 |
---|---|
是录制设备(Is Recording Device) |
如果该设备类型即将用于录制序列,则启用此选项。 |
IP地址(IP Address) |
SoundDevices Web服务器的地址。 |
为Switchboard创建你自己的设备插件
根据你的项目需求和你使用的设备,可能需要在Switchboard中添加或扩展设备功能。此部分介绍如何在Python中创建你自己的设备插件。利用一些C++知识即可将Listener扩展成接受更多类型的消息,但本文不包含这方面的内容。
以下说明逐步介绍如何为Switchboard创建新的设备插件 SampleDevice,该插件可用作起点。
要使设备插件在加载后可以在Switchboard中发现,必须在
\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\
中按照命名惯例<plugin_name>\plugin_<plugin_name>.py
创建一个文件夹和Python文件。对于 SampleDevice 插件,请创建以下文件:
\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\sampledevice\plugin_sampledevice.py
.
在
plugin_sampledevice.py
文件中,扩展\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\device_base.py
中定义的Device
类。从
device_base.py
中导入Device
。创建新类
DeviceSampleDevice
,此类继承自Device
。从
switchboard/switchboard_logging.py
导入LOGGER
以报告错误。从switchboard.devices.device_base导入Device 从switchboard.switchboard_logging导入LOGGER class DeviceSampleDevice(Device):` def __init__(self, name, ip_address, **kwargs): super().__init__(name, ip_address, **kwargs)
确认文件可以被Switchboard发现。启动Switchboard并展开 添加设备(Add Device) 下拉菜单。SampleDevice 出现在列表中。
将SampleDevice添加到你的Switchboard不会在视图中创建控件。要创建SampleDevice控件,请扩展
plugin_sampledevice.py
中的DeviceWidget
:从
device_widget_base.py
导入DeviceWidget
。创建新类
DeviceWidgetSampleDevice
,此类继承自DeviceWidget
。从switchboard.devices.device_base导入Device 从switchboard.devices.device_widget_base导入DeviceWidget 从switchboard.switchboard_logging导入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控件将显示在视图中。
在添加新的SampleDevice时创建自定义对话框,方法是创建继承自
AddDeviceDialog
的新类,并将其分配到DeviceSampleDevice
类中的静态变量add_device_dialog
。从
device_widget_base.py
导入AddDeviceDialog
。从PySide2导入Qt模块
创建继承自
AddDeviceDialog
的新类AddSampleDeviceDialog
,并在调用基础类的构造函数时,将device_type参数设置成"SampleDevice"。在新类的构造函数中,将QLineEdit文本框添加到对话框。
使用新类覆盖
DeviceSampleDevice
中的add_device_dialog
静态变量。从switchboard.devices.device_base导入Device 从switchboard.devices.device_widget_base导入AddDeviceDialog、DeviceWidget 从switchboard.switchboard_logging导入LOGGER 从PySide2导入QtWidgets、QtGui、QtCore class AddSampleDeviceDialog(AddDeviceDialog): def __init__(self, existing_devices, parent=None): super().__init__(device_type="SampleDevice", existing_devices=existing_devices, parent=parent) # 创建QTWidgets以添加到表单 self.additional_text_field = QtWidgets.QLineEdit(self) # 将新选项附加到父类中定义的QTWidgets.QFormLayout对象 self.form_layout.addRow("Additional Text", self.additional_text_field) class DeviceSampleDevice(Device): # 重载与设备插件关联的添加设备对话框对象 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
。创建新类
SampleDeviceTabView
,此类继承自QtWidgets.QWidget
。在
DeviceSampleDevice
中创建类成员tab_view
以容纳控件的实例。覆盖
DeviceSampleDevice
中的类方法plug_into_ui
,并使用新类SampleDeviceTabView
初始化tab_view
。从switchboard.devices.device_base导入Device 从switchboard.devices.device_widget_base导入AddDeviceDialog、DeviceWidget 从switchboard.switchboard_logging导入LOGGER 从PySide2导入QtWidgets、QtGui、QtCore class AddSampleDeviceDialog(AddDeviceDialog): def __init__(self, existing_devices, parent=None): super().__init__(device_type="SampleDevice", existing_devices=existing_devices, parent=parent) # 创建QTWidgets以添加到表单 self.additional_text_field = QtWidgets.QLineEdit(self) # 将新选项附加到父类中定义的QTWidgets.QFormLayout self.form_layout对象 self.form_layout.addRow("Additional Text", self.additional_text_field) class DeviceSampleDevice(Device): add_device_dialog = AddSampleDeviceDialog # 覆盖插件的默认对话框 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设备插件。