UE4使用nDisplay渲染到多個顯示設備(一)

UE4使用nDisplay渲染到多個顯示設備(一)

文檔鏈接

交互式內容不侷限於顯示在一個屏幕上,甚至不侷限於一個像VR頭盔一樣的雙屏幕設備。越來越多的可視化系統旨在通過多個同時顯示的實時內容來更有效地讓觀衆沉浸在遊戲環境中。這些系統可能由多個相鄰的物理屏幕組成,例如Powerwall顯示器;或者他們可能使用多個投影儀將3D環境投射到物理表面,如穹頂、傾斜的牆壁或彎曲的屏幕,如在洞穴虛擬環境中。

虛幻引擎通過一個名爲nDisplay的系統支持這些使用場景。該系統解決了同時將3D內容呈現給多個顯示器的一些最重要的挑戰:

  • 它簡化了跨網絡中的不同計算機部署和啓動項目的多個實例的過程,每個實例都呈現給一個或多個顯示設備。
  • 它根據顯示硬件的空間佈局,管理在每一幀中爲每個屏幕計算查看截錐體所涉及的所有計算。
  • 它確保在各種屏幕上顯示的內容保持完全同步,在引擎的所有實例中都具有確定性的內容。
  • 它提供了被動和主動的立體渲染。
  • 它可以由VR跟蹤系統的輸入驅動,這樣顯示器中的視點就可以準確地跟隨真實生活中移動的觀衆的視點。
  • 它足夠靈活,可以支持任何相對方向的任意數量的屏幕,並且可以跨任意數量的項目輕鬆地重用它。

nDisplay 概覽

描述在nDisplay渲染網絡中多臺計算機如何一起工作。

每個nDisplay設置都有一個主計算機,以及任意數量的其他計算機。

  • 網絡中的每臺計算機運行一個或多個項目打包的可執行文件實例。
  • 每個虛幻引擎實例處理渲染到一個或多個顯示設備,如屏幕或投影儀。
  • 對於每個設備,一個虛幻引擎的實例處理,它呈現一個單一的觀點在同一3D場景。通過設置這些視點,使它們在3D世界中的位置與真實世界中屏幕或投影表面的物理位置相匹配,您可以給觀衆一種在虛擬世界中存在的錯覺。
  • 主節點還負責通過與虛擬現實外圍網絡(vrpn)的連接接收來自空間跟蹤器和控制器的輸入,並將這些輸入複製到所有其他連接的計算機。

在這裏插入圖片描述

上圖顯示了一個可能的nDisplay網絡。像所有的nDisplay網絡一樣,它的一臺pc充當主節點。此主節點接受來自VRPN服務器的系統輸入,VRPN服務器中繼來自空間跟蹤設備和其他控制器設備的信號。該網絡還包含其他幾臺pc,它們運行虛幻引擎項目的其他實例。每個集羣節點驅動一個或多個顯示投影儀。


一個應用程序實例,呈現給一個顯示設備
這是爲nDisplay設置主機的最直接的方法。對於您需要的每個投影儀或顯示設備,您需要設置一臺計算機來處理該設備的呈現。在那臺計算機上,運行虛幻引擎的一個實例。通常,在此場景中,您將設置該應用程序實例,以將單個3D空間矩形呈現到單個視圖中。


多個應用程序實例,每個實例呈現給一個顯示設備
如果您的網絡中有多臺計算機,它們有多個顯卡,可以驅動多個顯示設備,那麼您可以在這些計算機上運行虛幻引擎的多個實例。您將指導虛幻引擎的每個實例呈現不同的3D空間矩形,並將每個實例分派到不同的圖形卡。
如果項目的CPU和內存需求足夠小,可以在同一臺計算機上運行多個實例,則此方法可以很好地工作。


一個應用程序實例渲染到多個顯示設備
使用此選項,您可以在計算機上運行虛幻引擎應用程序的單個實例,但是您可以將其設置爲在一個大窗口內將場景3D空間的多個獨立矩形呈現到不同的區域。然後使用NVIDIA Mosaic或NVIDIA Surround等技術來分割單個大窗口,並在不同的顯示設備上呈現每個單獨的區域。
在這種情況下,將nDisplay與Mosaic或Surround一起使用的好處是,您可以呈現與不同監視器的物理佈局精確匹配的視圖,即使這些監視器不在同一平面上。但是,所有的視圖都是由同一個虛幻引擎實例渲染的,所以你不能在同一臺電腦上安裝多個顯卡。


nDisplay 組件

nDisplay爲通常的虛幻系統架構添加了幾個組件:

  • 在虛幻引擎內部工作的插件。它在組成集羣的所有應用程序實例之間通信和同步信息,確保所有實例同時呈現相同的幀,確保每個顯示設備呈現正確的遊戲世界截屏,等等。
  • 一個網絡供應和管理應用程序,叫做nDisplayLauncher。您在網絡中的一臺計算機上運行這個應用程序,以便在網絡中的所有計算機上自動啓動和退出打包的虛幻引擎應用程序。
  • 一個獨立的監聽程序,叫做nDisplayListener,在每臺計算機上運行。此應用程序偵聽來自nDisplayLauncher的傳入請求,並在本地計算機上處理這些請求。
  • 一個包含nDisplay所需的所有設置的共享配置文件,在正確的計算機上啓動正確數量的實例,每個實例在遊戲的3D世界中呈現正確的視圖,從而在所有的屏幕或投影儀上產生無縫呈現的假象。參見nDisplay配置文件參考。

Buleprint API

你可以在你的遊戲運行時邏輯中使用藍圖api來控制nDisplay系統的行爲。

系統公開了下面的API:

  1. 對於大多數與集羣管理、查詢輸入設備、nDisplay呈現等相關的nDisplay Blueprint功能,在您的Blueprint中創建一個新的N Display > Get DisplayCluster模塊API節點。
    對於在VRPN輸入設備和虛幻引擎輸入事件之間設置綁定和反射的函數,在您的藍圖中創建一個新的N Display > Get DisplayClusterInput模塊API節點。請參閱將設備通道綁定到UE4輸入

  2. 從節點的Out API pin中拖出,查看顯示集羣或顯示集羣輸入類別:
    在這裏插入圖片描述

擴展 nDisplay

nDisplay提供了許多開箱即用的特性,用於跨多臺計算機和輸出設備控制實時、同步的渲染。然而,有各種各樣的投影系統和顯示錶面,您可能需要擴展nDisplay渲染系統來支持您自己的技術選擇。如果您熟悉c++編程,並且瞭解nDisplay在典型用例中的工作方式,那麼可以在可擴展的呈現API之上構建nDisplay,從而擴展nDisplay以支持其他顯示和校準技術。

nDisplay API將渲染管道分解成幾個主要概念:

  • DisplayClusterRenderingDevice,它本質上是本地IStereoRendering接口的擴展。
  • DisplayClusterPostProcess是一組6個回調,您可以使用它們將後期處理應用到特定的視圖端口。
  • DisplayClusterProjectionPolicy負責自定義投影方法,例如支持可伸縮的顯示或MPCDI來渲染到曲面,或執行簡單的平面投影。
  • DisplayClusterRenderSyncPolicy用於各種同步方法,如nvSwapLock、vSync或用於24hz顯示的自定義跳幀同步。

通過上面的描述,你可以創建自己的專用的功能。您可以自定義生成的圖像nDisplay系統適合任何或投影顯示技術,同時讓所有的nDisplay集羣系統都受益,而無需修改已發行的虛幻引擎源代碼。

有關如何設置這些元素的實現的工作模型,請參閱PicpProjection和PicpMPCDI模塊的源代碼。你可以在虛幻引擎源代碼的Engine/Plugins/Runtime/nDisplay/Source中找到這些模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章