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将以下多个组件添加到常用的虚幻系统架构:

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

  • 名为 nDisplayLauncher 的网络供应和管理应用程序。可在网络中的单个计算机上运行此应用程序,以便在网络中的所有计算机上自动启动和退出已打包的虚幻引擎应用程序。

  • 在所有计算机上运行单独的监听应用程序 nDisplayListener。此应用程序聆听nDisplayLauncher中传入的请求,并在本地计算机上处理此类请求。

  • 包含nDisplay所需全部设置的共享配置文件,以在正确的计算机上启动正确数量的实例,各实例在游戏的3D场景中渲染正确视点,从而在所有显示屏或投影仪上生成无缝渲染的效果。参阅nDisplay配置文件参考

运行时摄像机控制

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

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

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

蓝图API

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

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

  1. 对于群集管理、查询输入设备、nDisplay渲染等多数相关的nDisplay蓝图函数,在蓝图中新建 N Display > Get DisplayCluster Module API 节点。
    对于在VRPN输入设备和虚幻引擎输入事件间设置绑定和反射的函数,在蓝图中新建 N Display > Get DisplayClusterInput Module API 节点。另参阅将设备通道绑定到UE4输入

  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`下)中找到这些模块。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback