nDisplay 개요

nDisplay 렌더링 네트워크에서 여러 컴퓨터가 함께 작동하는 방법을 설명합니다.

Windows
MacOS
Linux

모든 nDisplay 구성은 마스터 컴퓨터 한 대와 추가 컴퓨터로 이뤄지며 추가 컴퓨터의 수에는 제한이 없습니다.

  • 네트워크의 컴퓨터마다 프로젝트를 패키지로 만든 실행 파일 인스턴스를 하나 이상 실행합니다.

  • 각 언리얼 엔진 인스턴스는 화면이나 프로젝터 같은 하나 이상의 디스플레이 디바이스로 렌더링을 처리합니다.

  • 언리얼 엔진 인스턴스가 처리하는 디바이스 각각에 대해 동일한 3D 씬에 하나의 시점을 렌더링합니다. 이 시점의 3D 월드 위치가 현실의 화면이나 투영 표면의 물리적 위치에 일치하도록 시점을 구성하면 보는 사람이 가상 세계에 있는 듯한 느낌을 줄 수 있습니다.

  • 마스터 노드는 VRPN(Virtual-Reality Peripheral Networks, 가상현실 주변장치망) 연결을 통해 공간 트래커와 컨트롤러의 입력을 받아 해당 입력을 연결된 모든 컴퓨터에 리플리케이트하는 작업도 담당합니다.

nDisplay 네트워크 개요

위 이미지는 가능한 nDisplay 네트워크의 예시를 보여줍니다. 모든 nDisplay 네트워크와 마찬가지로 해당 네트워크에 속한 PC 중 한 대가 마스터 노드 역할을 합니다. 이 마스터 노드는 VRPN 서버에서 시스템으로 입력을 받으며, 이 VRPN 서버는 공간 트래킹 디바이스에서 오는 신호를 다른 컨트롤러 디바이스에 중계합니다. 이 네트워크에는 언리얼 엔진 프로젝트의 다른 인스턴스를 실행하는 다른 PC도 포함되어 있습니다. 이 클러스터 노드 각각은 하나 이상의 디스플레이 프로젝터를 구동합니다.

하나의 애플리케이션 인스턴스가 하나의 디스플레이 디바이스로 렌더링합니다.
nDisplay 호스트를 구성하는 가장 간단한 방법입니다. 필요한 각 프로젝터 또는 디스플레이 디바이스에 컴퓨터 한 대를 구성하여 해당 디바이스에 대한 렌더링을 처리합니다. 이 컴퓨터에서는 언리얼 엔진의 인스턴스를 하나 실행합니다. 일반적으로 이 시나리오에서는 3D 공간의 단일 사각형을 단일 뷰포트로 렌더링하도록 애플리케이션 인스턴스를 구성합니다.

여러 애플리케이션 인스턴스가 각각 하나의 디스플레이 디바이스로 렌더링합니다.
그래픽 카드가 여러 개 설치되어 멀티 디스플레이 디바이스 구동 작업을 처리할 수 있는 컴퓨터가 네트워크에 있는 경우, 해당 컴퓨터에서 언리얼 엔진 인스턴스를 여러 개 실행할 수 있습니다. 이 경우 언리얼 엔진의 각 인스턴스가 3D 공간의 서로 다른 사각형을 렌더링하고 렌더링된 각 사각형을 서로 다른 그래픽 카드에 전달합니다.
이 방법은 프로젝트의 CPU 및 메모리 요구 사항이 가벼워서 동일한 컴퓨터에서 여러 인스턴스를 실행할 수 있는 경우에 적합합니다.

하나의 애플리케이션 인스턴스가 여러 디스플레이 디바이스로 렌더링합니다.
이 옵션을 사용하면 컴퓨터에서 실행되는 언리얼 엔진 애플리케이션 인스턴스는 하나지만, 씬의 3D 공간에 포함된 개별 사각형 여러 개를 커다란 창 안의 여러 영역에 렌더링하도록 구성할 수 있습니다. 그런 다음 NVIDIA Mosaic 또는 NVIDIA Surround 같은 기술을 사용하여 하나의 커다란 창을 분할한 후 다양한 디스플레이 디바이스에 각 개별 영역을 렌더링할 수 있습니다.
이 시나리오에서 nDisplay를 Mosaic 또는 Surround와 함께 사용하면 여러 모니터가 동일한 평면 위에 놓여있지 않아도 물리적 배치가 정확한 뷰포트를 렌더링할 수 있습니다. 하지만 언리얼 엔진의 동일한 인스턴스가 모든 뷰포트를 렌더링하므로 한 컴퓨터에 여러 그래픽 카드가 설치되어 있어도 이점을 얻을 수 없습니다.

nDisplay 컴포넌트

nDisplay 는 일반적인 언리얼 시스템 아키텍처에 다음과 같은 여러 컴포넌트를 추가합니다.

  • 언리얼 엔진 내에서 작동하는 플러그인. 클러스터를 구성하는 모든 애플리케이션 인스턴스 간에 정보를 통신하고 동기화하여 모든 인스턴스가 동시에 같은 프레임을 렌더링하는지, 각 디스플레이 디바이스가 게임 월드의 올바른 프러스텀을 렌더링하는지 등을 확인합니다.

  • 공유 구성 에셋. 여기에는 nDisplay가 올바른 컴퓨터에서 올바른 수의 인스턴스를 실행하고, 각 인스턴스가 게임의 3D 월드를 올바른 시점에서 렌더링하여 모든 디스플레이 화면 또는 프로젝터에 걸쳐 끊김없이 렌더링되는 것처럼 보이도록 하는 데 필요한 모든 세팅이 포함되어 있습니다. 자세한 내용은 nDisplay 3D 환경설정 에디터(nDisplay 3D Config Editor)를 참고하세요. <!--

워크플로

네트워크에서 사용할 서로 다른 컴퓨터와 이러한 컴퓨터로 렌더링할 화면 또는 프로젝터의 크기 및 해상도, 3D 공간 내에서의 화면 간 공간적 관계 등에 대해 nDisplay에 알려줘야 합니다. 이렇게 하려면 이 정보를 모두 일련의 세팅으로 표현하는 환경설정 에셋을 생성해야 합니다.

일반적으로 환경설정 에셋을 한번 구성한 후에는 네트워크 토폴로지가 변경된 경우에만 수정하면 됩니다. 예를 들어 렌더링하고 있는 컴퓨터를 변경해야 하거나, 현실의 화면 및 디스플레이의 물리적 배열을 변경해야 하는 경우를 들 수 있습니다.

nDisplay 클러스터 구성의 일반적인 워크플로는 다음과 같습니다.

  1. 언리얼 에디터에서 새 nDisplay 환경설정 에셋을 생성합니다.

  2. nDisplay 3D 환경설정 에디터(nDisplay 3D Config Editor)에서 nDisplay 환경설정 에셋(nDisplay Config Asset)을 환경설정합니다.

    1. 컴포넌트: 루트 컴포넌트에 디스플레이, 카메라 및 트랜스폼을 추가합니다.

    2. 클러스터: 클러스터 PC 환경설정의 표현을 생성하고 뷰포트 및 GPU ID를 할당합니다. 기본적으로 PC 및 뷰포트를 추가합니다.

    3. 출력 매핑: 언리얼 엔진 애플리케이션 창에 뷰포트를 효과적으로 매핑합니다. 디스플레이, 화면 또는 메시 컴포넌트에 프로젝션 정책을 할당하고 뷰포트를 바인딩합니다.

    nDisplay 환경설정 에셋 생성

  3. nDisplay 환경설정 에셋(nDisplay Config Asset)을 레벨 뷰포트로 드래그하여 nDisplay 루트 액터(Root Actor)를 생성한 후 클러스터의 시점에서 프로젝트 콘텐츠를 프리뷰합니다.

    nDisplay 루트 액터 생성

  4. 스위치보드(Switchboard)를 사용하여 실제 nDisplay 구성에서 프로젝트를 실행합니다.

컴퓨터에서 샘플 nDisplay 환경설정을 시작하려면 nDisplay 퀵스타트에 나와 있는 단계를 따릅니다.

nDisplay 클러스터를 실행할 때는 nDisplay 루트 액터가 레벨에 없어도 됩니다. nDisplay 플러그인이 프로젝트에서 활성화되어 있는 경우 스위치보드 내의 nDisplay 환경설정 에셋(.uasset 또는 .ndisplay 파일) 위치를 지정하거나 nDisplay 환경설정 파일(.cfg 또는 .ndisplay)을 명령줄 인수로 지정할 수 있습니다. 이 방법은 인게임 및 패키지드(Packaged) 모드에서 작동합니다.

환경설정 에셋이 프로젝트에 이미 액터로 존재하는 경우에는 스위치보드 또는 명령줄 인수를 사용하여 외부에서 지정할 경우 이 에셋은 무시됩니다.

멀티 GPU 지원

nDisplay는 뷰포트 렌더링에 멀티 GPU(mGPU)를 지원하므로, GPU 디바이스를 하나 지정하여 특정 뷰포트를 렌더링하고 다른 GPU로 프레임을 복사하여 표시할 수 있습니다. 예를 들어 버추얼 프로덕션 및 인카메라 VFX 시나리오의 경우, 내부 프러스텀은 두 번째 GPU에서 모두 렌더링함으로써 퍼포먼스와 하드웨어 활용도를 개선할 수 있습니다.

NVLink를 갖춘 NVIDIA GPU의 경우, CPU를 바이패스하여 GPU 간에 메모리를 직접 전송할 수 있습니다. NVLink 없는 경우, 모든 메모리 전송이 피어 투 피어(P2P) 방식으로 진행되지만 PCIe를 통해 CPU를 거쳐 가야 하므로 속도가 느릴 수 있습니다.

nDisplay 구성에서 mGPU를 활성화하려면 다음 단계를 따릅니다.

  1. nDisplay 3D 환경설정 에디터(nDisplay 3D Config Editor)에서 nDisplay 환경설정 에셋(nDisplay Config Asset)을 엽니다.

  2. 컴포넌트(Components) 패널에서 환경설정 에셋을 선택하여 '디테일(Details)' 패널을 연 후 환경 설정(Configuration) > 렌더 프레임 세팅(Render Frame Settings) > 멀티 GPU 모드(Multi GPU Mode)활성화됨(Enabled) 으로 설정합니다.

  3. 뷰포트 렌더링의 경우: nDisplay 3D 환경설정 에디터(nDisplay 3D Config Editor)에서 뷰포트를 선택한 후 해당 '디테일(Details)' 패널에서 'GPUIndex' 필드를 GPU의 인덱스로 설정합니다.

    enable-mGPU-viewpoint.png

    내부 프러스텀의 경우: nDisplay 3D 환경설정 에디터(nDisplay 3D Config Editor)에서 ICVFX 카메라를 선택한 후 해당 '디테일(Details)' 패널에서 'GPUIndex' 필드를 GPU의 인덱스로 설정합니다.

    enable-mGPU-ICVFX.png

    일반적으로 컴퓨터에 설치 및 활성화된 첫 번째 GPU는 0 으로 참조되고, 나머지 GPU는 1, 2, ... , n 으로 참조됩니다. OS에서 제공되는 GPU 디바이스 번호는 컴퓨터 세팅에서 찾을 수 있습니다. 예를 들어 Windows의 경우 '작업 관리자(Task Manager)'에서 GPU 디바이스 번호를 확인할 수 있습니다:

    1. '작업 관리자(Task Manager)'를 엽니다.

    2. '성능(Performance)' 탭으로 전환합니다.

    3. 창 왼쪽을 보면 머신에 설치된 모든 GPU와 디바이스 번호가 표시되어 있습니다.

      gpu-0.jpg

      GPU 0

  4. 스위치보드를 통해 nDisplay를 실행하는 경우 커스텀 명령줄 인수에 'MaxGPUCount=2'를 추가합니다.

런타임 카메라 컨트롤

nDisplay는 환경설정 파일에서 구성한 가상 3D 공간 내의 씬 오브젝트 계층구조를 내부적으로 유지합니다. 예를 들어 이 씬 계층구조는 보통 카메라화면 세트, 즉 현실의 디스플레이 화면이나 가상 세계의 프로젝션 표면 등을 나타내는 3D 공간의 사각형 위치를 정의합니다. 이러한 nDisplay 씬 오브젝트의 위치는 항상 가상 공간의 원점 (0,0,0)에 위치한 단일 루트 에 상대적으로 정의됩니다.

nDisplay가 활성화된 프로젝트를 실행할 때, 이 가상 공간의 루트는 레벨 내 카메라에 어태치되어 있는 DisplayClusterRoot 컴포넌트의 위치 및 회전을 기반으로 합니다. nDisplay는 매 프레임마다 이 루트 컴포넌트의 위치 및 회전을 환경설정 파일에서 구성된 씬 노드 계층구조의 시작 지점으로 사용합니다.

기본적으로 nDisplay는 스타트업 시 'DisplayClusterRoot' 컴포넌트를 생성하여 기본 카메라에 어태치합니다. 그 효과는 전체 nDisplay 클러스터의 모든 디바이스와 프로젝터가 활성화된 카메라의 시점으로부터 씬을 자동으로 렌더링하도록 만드는 것입니다.

<!--

블루프린트 API

블루프린트 API를 사용하여 게임의 런타임 로직에서 nDisplay 시스템의 행동을 컨트롤할 수 있습니다.

이러한 API에서 노출된 함수를 얻으려면 다음 단계를 따릅니다.

  1. 클러스터 관리, 입력 디바이스 쿼리, nDisplay 렌더링 등과 관련된 대부분의 nDisplay 블루프린트 함수의 경우 블루프린트에서 N Display > DisplayCluster Module API 노드를 새로 만듭니다.

  2. 노드의 Out API 핀에서 드래그하여 디스플레이 클러스터(Display Cluster) 카테고리를 봅니다.

nDisplay 확장

nDisplay는 여러 컴퓨터와 출력 디바이스에서 실시간으로 동기화된 렌더링을 컨트롤하는 데 바로 사용할 수 있는 수많은 기능을 제공합니다. 하지만 프로젝션 시스템 및 디스플레이 표면의 종류는 굉장히 다양하기 때문에 사용자가 선택한 기술을 지원하려면 nDisplay 렌더링 시스템을 확장해야 할 수도 있습니다. C++ 프로그래밍에 익숙하고 일반적인 사용 사례에서의 nDisplay 작동 방식을 잘 이해하고 있다면 nDisplay의 확장 가능한 렌더링 API를 바탕으로 빌드 작업을 통해 추가 디스플레이 및 보정 기술을 지원하도록 확장할 수 있습니다.

nDisplay API는 렌더링 파이프라인을 다음과 같은 몇 가지 주요 개념으로 나눕니다.

  • DisplayClusterRenderingDevice 는 본질적으로 네이티브 IStereoRendering 인터페이스의 확장입니다.

  • DisplayClusterPostProcess 는 포스트 프로세싱을 특정 뷰포트에 적용하는 데 사용할 수 있는 여섯 개의 콜백 집합입니다.

  • DisplayClusterProjectionPolicy 는 스케일 조절 가능한 디스플레이나 MPCDI를 지원하는 커스텀 프로젝션 방식을 담당하여 곡면에 렌더링하거나 단순 평면 프로젝션을 수행합니다.

  • DisplayClusterRenderSyncPolicynvSwapLock, vSync 또는 24hz 디스플레이용 커스텀 스킵 프레임 싱크 등 다양한 동기화 방식에 사용됩니다.

위에서 설명한 엘리먼트를 사용자의 필요에 맞게 생성하면 nDisplay 시스템에 의해 제작된 이미지를 작업할 프로젝션이나 디스플레이 기술에 맞도록 커스터마이징할 수 있으며, 출시된 언리얼 엔진 소스 코드를 전혀 변경할 필요 없이 nDisplay 클러스터 시스템의 핵심적인 이점까지 동시에 모두 누릴 수 있습니다.

위 엘리먼트의 구현 구성 방식을 보여주는 작동 모델은 PicpProjectionPicpMPCDI 모듈의 소스 코드를 참고하세요. 두 모듈은 Engine/Plugins/Runtime/nDisplay/Source 경로의 언리얼 엔진 소스 코드에서 찾을 수 있습니다.

사용자의 커스텀 키-값 짝을 nDisplay 클러스터에 제공할 수도 있습니다. 환경설정 에셋의 '디테일' 패널에 있는 '커스텀 파라미터(Custom Parameters)' 필드에는 파라미터와 값을 필요한 만큼 포함시킬 수 있습니다. 그런 다음 런타임에서 nDisplay 블루프린트 또는 C++ API에서 이러한 환경설정 값을 얻을 수 있습니다.

커스텀 파라미터를 추가하려면 다음 단계를 따릅니다.

  1. 3D 환경설정 에디터(3D Config Editor) 를 열고 '컴포넌트(Components)' 패널에서 self 를 선택하여 해당 디테일(Details) 패널을 엽니다.

  2. 디테일(Details) 패널에서 환경설정(Configuration) 섹션을 펼쳐 커스텀 파라미터(Custom Parameters) 필드에 엘리먼트를 추가합니다.

    nDisplay 클러스터에 커스텀 파라미터 추가

<!--

대체 작동 지원

nDisplay가 이제 대체 작동을 지원하므로 클러스터 시스템이 자체 대체 작동 로직을 구현하여 가장 흔히 발생하는 오류로부터 안전하게 복원할 수 있게 되었습니다.

클릭하면 이미지 원본을 확인합니다.

플로차트 세부 정보

이름

설명

대체 작동 유형

하드웨어(시각적 아티팩트)

시각적

치명적이지 않은 시각적 오류로, 디바이스는 여전히 네트워크에서 반응합니다(메모리 손상, 잘못된 출력, 렌더링 아티팩트 등). 사용자는 해당 PC를 수동으로 트리거 및 드롭할 수 있습니다.

검색 가능한 네트워크

네트워크

지정된 PC에서 크래시가 발생하거나 사전 정의된 타임아웃 값 내에 반응하지 않는 경우 오류 노드로 분류되어 클러스터에서 자동으로 드롭됩니다.

콘텐츠 크래시

콘텐츠

모든 PC의 엔진이나 콘텐츠 오류로 인해 언리얼 엔진 프로젝트에서 크래시가 발생한 경우입니다. 이 경우는 현재 처리되지 않기 때문에 클러스터 전체를 재시작해야 합니다.

대체 작동 모드

없음

없음

대체 작동이 비활성화되었습니다. 오류 발생 시 다음 중 하나를 선택할 수 있습니다:

  • 바탕 화면으로 나갑니다.

  • 마지막 프레임에서 유지합니다.

드롭

드롭

환경설정 가능한 타임아웃 기간 후에 반응이 없는 경우 지정된 PC를 드롭합니다.

대체

대체

환경설정 가능한 타임아웃 기간 후에 오류가 발생한 PC를 백업 PC로 대체합니다. 올바르지 않은 출력이 발생한 PC는 수동으로 대체할 수 있습니다.

대체 작동 세팅

타임아웃(Timeout)

타임아웃 기간 값으로, 모든 클러스터 PC의 활성화를 유지하는 데 필요합니다. 타임아웃 기간을 초과할 경우 대체 작동 메커니즘이 트리거되면서 PC를 클러스터에서 드롭하게 됩니다.

상세(Verbose)

오류가 탐지된 시점을 리스너 앱에 알립니다.

현재 이 시스템은 자동화되어 있지 않지만, 오류가 발생할 경우 오류를 유발한 PC를 클러스터에서 드롭할 수는 있습니다. 향후에는 대체 작동 프로세스에 자동화를 추가적으로 구현하고 개선할 계획입니다.

지원 운영 체제

Windows

모든 nDisplay 툴 및 기능은 Windows 10, 8.1, 8 및 7에서 완전하게 작동합니다.

Linux

nDisplay 및 해당 툴 생태계는 이제 Linux 예비 지원을 포함합니다. 따라서 다양한 Linux 배포판에서 언리얼 엔진을 실행하는 사용자에게 도움이 되며, 특히 클러스터 구성 환경에서 훈련 및 시뮬레이션 중인 사용자에게는 더 큰 도움이 됩니다.

Linux에서 알려진 제한 사항

  • 커스텀 동기화 정책에는 기존 그래픽 카드 드라이버 지원으로 인해 일부 제한 사항이 있습니다.

  • 다른 공급업체에 의존하는 일부 프로젝션 정책은 검증이 필요합니다.

  • 레이 트레이싱과 같은 일부 렌더링 기능은 현재 지원되지 않습니다.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기