nDisplay概述

介绍在nDisplay渲染网络中多台计算机协同工作的方法。

Windows
MacOS
Linux

每个nDisplay设置都有一台 计算机和数量不定的附加计算机。

  • 网络中的各计算机将运行项目已打包可执行文件的一个或多个实例。

  • 每个虚幻引擎实例将处理一个或多个如屏幕或投影仪等显示设备的渲染。

  • 对于虚幻引擎实例处理的各设备,其在同一3D场景中渲染单个视点。通过设置此类视点,使其在3D场景中的位置与现实世界中屏幕或投影表面的物理位置匹配,可给观众营造身处虚拟世界中的错觉。

  • 主节点还负责通过虚拟现实外围网络(VRPN)的连接来接受空间跟踪器及控制器中的输入,然后将该输入复制到其他所有连接的计算机。

nDisplay network overview

上图显示了可能的nDisplay网络。与所有nDisplay网络相同,其PC中的一台将扮演主节点。该主节点接受来自VRPN服务器的系统输入,其会中继空间追踪设备和其他控制器设备中的信号。该网络同时包括运行虚幻引擎项目的其他实例额外几台PC。各群集节点驱动一个或多个显示投影仪。

一个应用程序实例,其渲染到一个显示设备
此为设置nDisplay主机最为直接的方法。对于所需的各投影仪或显示设备,需设置一台计算机来处理对该设备的渲染。在该计算机上,运行虚幻引擎的一个实例。在这种情况下,通常将设置该应用程序实例,以将3D空间的单个矩形渲染到单个视口中。

多个应用程序实例,各实例均渲染到一个显示设备
如网络中的计算机具有多个显卡,可驱动多个显示设备,则可在此类计算机上运行多个虚幻引擎实例。将导引虚幻引擎的所有实例渲染3D空间的不同矩形,并将各实例分派到不同的显卡。
如项目的CPU和内存需求够小,可在同一计算机上运行多个实例,则以上方法十分有用。

渲染到多个显示设备的一个应用程序实例。
使用此选项,可在计算机上运行虚幻引擎应用程序的单个实例,也可对其进行设置,将场景3D空间的多个单独矩形渲染到大型窗口的不同区域中。然后使用例如NVIDIA MosaicNVIDIA Surround等技术拆分单个大型窗口,在不同的显示设备上渲染各单独区域。
在这种情况下,将nDisplay与Mosaic或Surround结合使用的好处是可渲染与不同显示器的物理布局精确匹配的视图,即使此类显示器不在同一平面上,也可进行以上操作。但是,所有的视口均由相同虚幻引擎实例渲染,因此在同一计算机上安装多个显卡并无用处。

nDisplay组件

nDisplay将以下多个组件添加到常用的虚幻系统架构:

  • 在虚幻引擎内运作的插件。其会在组成群集的所有应用程序实例间通信和同步信息,确保所有实例同时渲染相同的帧、确保所有显示设备渲染游戏场景的正确视锥等。

  • 一个共享的配置资产,它包含 nDisplay 需要的所有设置,以便在正确的计算机上启动正确数量的实例。每个实例都能在游戏 3D 场景中渲染正确的视点,从而在所有屏幕或投影设备上产生无缝的渲染效果。请参阅nDisplay 3D 配置编辑器了解更多信息。

工作流程

你需要告诉nDisplay你希望在网络中使用的不同计算机、这些计算机将渲染到的屏幕或投影器的大小和分辨率、这些屏幕在3D空间中的空间关系以及其他设置。为了实现这些操作,你可以创建一个配置资产,在一系列设置中表现所有这些信息。

通常情况下,在设置配置资产之后,只有在网络拓扑发生更改时才需要修改它:例如,当你需要更改要渲染到的计算机时,或者在真实世界中更改屏幕和显示器的物理安排时。

用于设置nDisplay群集的通用工作流:

  1. 在虚幻编辑器中创建一个新的nDisplay配置资产。

  2. 在nDisplay 3D配置编辑器中配置你的nDisplay配置资产:

    1. 组件:将你的显示器、摄像机和变换添加到根组件。

    2. 群集:创建你的群集PC配置的表示,分配视口和GPU ID。此操作基本上是添加PC和视口。

    3. 输出映射:将视口有效地映射到UE应用程序窗口。分配投影策略和绑定视口到显示、屏幕或网格体组件。

    创建nDisplay配置资产

  3. 将nDisplay配置资产拖到关卡视口中,以便从群集视角创建nDisplay根Actor并预览项目内容。

    创建nDisplay Root Actor

  4. 使用

    [Switchboard](WorkingWithMedia/Switchboard)
    ,将你的项目启动到你的物理nDisplay设置上。

要在你的计算机上开始使用示例nDisplay配置,请按照

[nDisplay快速入门](WorkingWithMedia/nDisplay/QuickStart)
中的步骤进行操作。

nDisplay Root Actor 不需要在启动 nDisplay 集群的级别中。如果项目启用了 nDisplay 插件,您可以指定 Switchboard 中 nDisplay 配置资产(.uasset.ndisplay 文件)的位置,或者指定 nDisplay 配置文件(.cfg.ndisplay)作为一个命令行参数。这个方法在-game和Packaged模式下工作。

如果配置资产在你的项目中已经作为Actor存在,当你使用Switchboard或命令行参数从外部指定一个资产时,它将被忽略。

多GPU支持

nDisplay支持使用多个GPU (mGPU)进行视口渲染,因此你可以指定一个GPU设备来渲染特定的视口,然后将该帧复制到另一个GPU进行显示。例如,在虚拟制作和摄像机内视觉特效场景中,可以在第二个GPU上渲染整个内部视锥,从而提升性能和硬件利用率。

在具有NVLink的NVIDIA GPU上,你可以绕过CPU并将内存直接从GPU转移到GPU。没有NVLink,内存转移仍采用点对点(P2P)模式,但必须经过基于PCIe的CPU,因此转移速度可能会变慢。

要在nDisplay设置中启用mGPU:

  1. 在nDisplay 3D配置编辑器中打开你的nDisplay配置资产。

  2. 在组件(Components)面板中,选择配置资产以打开细节(Details)面板,然后将配置(Configuration) > 渲染帧设置(Render Frame Settings) > 多GPU模式(Multi GPU Mode)设置为启用(Enabled)。

  3. 如果是视口渲染: 在nDisplay 3D配置编辑器中,选择视口,在其细节(Details)面板中将GPUIndex字段设置为你的GPU的索引。

    enable-mGPU-viewpoint.png

    如果是内部视锥渲染: 在nDisplay 3D配置编辑器中,选择ICVFX摄像机,在其细节(Details)面板中将GPUIndex字段设置为你的GPU的索引。

    enable-mGPU-ICVFX.png

    通常情况下,你的计算机上安装和启用的第一个GPU称为0,而其他GPU则按照递增顺序编号为1、2……、n。你可以在计算机的设置中找到操作系统提供的GPU设备编号。例如在Windows系统中,你可以在任务管理器(Task Manager)中找到GPU设备编号:

    1. 打开任务管理器(Task Manager)。

    2. 切换到性能(Performance)选项卡。

    3. 窗口的左侧将显示你的计算机中的全部GPU及其设备编号。

      gpu-0.jpg

      GPU 0

  4. 在通过Switchboard启动nDisplay时,将MaxGPUCount=2添加到自定义命令行参数。

运行时摄像机控制

在虚拟3D空间中,nDisplay将内部维护配置文件中设置的场景对象的层级。例如,此场景层级通常定义 摄像机 位置,以及3D空间 画面 矩形集的位置,此类位置在虚拟场景中代表真实显示画面或投射表面。相对于虚拟空间中固定位于原点(0,0,0)的单个 位置来定义此类nDisplay场景对象的位置。

在运行启用了nDisplay的项目时,此虚拟空间的根基于关卡中附加到摄像机的 DisplayClusterRoot 组件的位置和旋转。nDisplay每帧均会将此根组件的位置和旋转用作配置文件中设置的场景节点的层级起始点。

nDisplay在启动时会默认创建DisplayClusterRoot组件,并将其附加到默认摄像机。从而产生整个nDisplay簇中的所有设备和投影仪,将以活跃摄像机的视角自动渲染场景的效果。

蓝图API

可在游戏运行时逻辑中,使用游戏的蓝图API控制nDisplay系统的行为。

要获取此类API中公开的函数:

  1. 对于群集管理、查询输入设备、nDisplay渲染等多数相关的nDisplay蓝图函数,在蓝图中新建 N Display > DisplayCluster Module API 节点。

  2. 从节点的 Out API 引脚拖动,然后在 显示群集显示群集输入 类别下查看:

扩展nDisplay

nDisplay原生提供诸多功能,用于控制跨多个计算机和输出设备的实时同步渲染。由于存在大量投射系统和显示表面,可能需要扩展nDisplay渲染系统来支持您自己选择的技术。若熟悉C++编程,并了解nDisplay在典型用例中的工作方式,则可在nDisplay的可扩展渲染API上进行打造,从而扩展nDisplay来支持其他显示和校准技术。

nDisplay API将渲染通道分解为数个主要概念:

  • DisplayClusterRenderingDevice,本质上是本地 IStereoRendering 接口的扩展。

  • DisplayClusterPostProcess,一组六个回调,用于对特定视口应用后期处理效果。

  • DisplayClusterProjectionPolicy,负责自定义投射方法,如支持可扩展显示或MPCDI,以便渲染至曲面,或执行简单平面投射。

  • DisplayClusterRenderSyncPolicy,用于各种同步方法,如 nvSwapLock、vSync或24hz显示的自定义跳帧同步。

创建上述自有专业化元素之后,即可自定义nDisplay系统生成的图像,以适应使用的任何投射或显示技术,同时仍可享受nDisplay群集系统的所有关键优势,无需修改发布的虚幻引擎源代码。

欲知如何设置这些元素实现的工作模型,参阅"PicpProjection"和"PicpMPCDI"模块的源代码。可在虚幻引擎源代码(`Engine/Plugins/Runtime/nDisplay/Source`下)中找到这些模块。

你可以为nDisplay集群提供自定义键值对。你可以在配置资产的细节面板中的自定义参数字段中添加任意数量的参数和数值。然后,你可以在运行时,通过nDisplay蓝图或C++ API来获取这些配置值。

要添加自定义参数:

  1. 3D配置编辑器 中,选择组件面板中的 Self,打开其 细节 面板。

  2. 细节 面板中,展开 配置 分段,在 自定义参数 字段中添加元素。

    Adding Custom Parameters to your nDisplay cluster

支持的操作系统

Windows

在Windows 10、8.1、8和7上,nDisplay的所有工具及功能都有效。

Linux

nDisplay及其工具生态链现在包含对Linux的初级支持。这将使在各种Linux发行版下运行UE的用户受益,特别是那些在集群设置环境下进行培训和模拟的用户。

Linux相关的已知限制

  • 由于现有显卡驱动支持的原因,自定义同步策略会有一些局限性。

  • 某些依赖其他供应商的投影策略将必须被验证。

  • 某些渲染功能(例如光线追踪)目前还不支持。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消