nDisplay에서의 동기화

멀티 디스플레이를 동기화하는 방법을 살펴봅니다.

동기화 는 리얼타임 콘텐츠를 여러 섹션으로 분할하여 대형 디스플레이에 표시할 때 매우 중요합니다. 렌더/디스플레이 생태계 내의 모든 시스템은 밀리초 단위의 엄격한 타이밍을 준수하여 끊김없이 표시되는 것처럼 보여야 합니다.

멀티 디스플레이 구성에는 흔히 소프트웨어 및 하드웨어 레벨의 동기화 기능이 필요합니다. 생성된 콘텐츠가 모든 PC에서 동일한 시뮬레이션 타이밍 정보를 사용하여 동시에 준비되어야 할 뿐 아니라, 디스플레이 교체(현재 이미지를 비디오 카드 버퍼의 다음 이미지로 바꾸는 것) 또한 적시에 실행되어야 디스플레이의 티어링 아티팩트(tearing artifact)가 발생하는 것을 방지할 수 있습니다.

VR 및 기타 유형의 스테레오스코픽 디스플레이의 경우, 눈 하나당 하나씩 총 두 개의 프레임이 완벽하게 조응해야 하기 때문에 동기화 문제가 두 배로 나타납니다.

결정론

동기화를 관리하는 방식에는 두 가지 유형이 있습니다.

  • 결정론적: 특정 입력 세트가 주어졌을 때 출력을 항상 예측할 수 있도록 각 서버(PC, 렌더링 노드)를 구성합니다. 즉, 서버가 시스템 내에서 다른 머신과 동기화하는 데 필요한 정보는 정확한 시간과 개별 머신의 입력/출력 정보뿐입니다.

  • 비결정론적: 동기화를 보장하기 위해 시스템이 씬 내 모든 액터 또는 오브젝트의 트랜스폼 매트릭스 및 기타 관련 특성의 리플리케이션을 강제하고 시스템 전반에서 이를 재현합니다.

각 방식에는 장점과 단점이 있습니다. 결정론적 시스템의 주된 장점은 프로젝트의 단순성입니다. 또한 매 프레임마다 각 오브젝트의 트랜스폼 데이터를 공유하지 않으므로 데이터 대역폭이 절약됩니다. 단점은 한 시스템이 달라지면 이로 인해 오랜 시간 동안 알 수 없는 문제가 발생할 수도 있다는 것입니다. 즉, 렌더링 균일성이 심각하게 손상되어 비주얼 측면에서 불연속성과 아티팩트가 유발될 수 있습니다.

하드웨어 동기화 및 젠록

nDisplay 프라이머리 PC모든 클러스터(노드) PC 가 게임플레이 측면에서의 타이밍 정보(예: 렌더링할 프레임)를 전달받도록 보장하지만, 렌더링된 프레임을 물리적 디스플레이 디바이스와 완전히 똑같은 시간에 맞춰 동기화하려면 하드웨어 동기화 전용 카드와 호환되는 전문가급 그래픽 카드가 필요합니다.

예를 들어 브로드캐스트 애플리케이션에서는 카메라, 모니터 및 기타 디스플레이 같은 여러 디바이스가 정확히 같은 시간에 전환되어 다음 프레임을 캡처할 수 있도록 동기화하는 것이 일반적입니다. 이 업계에서는 제너레이터 잠금 신호(젠록) 가 널리 채택되어 사용되고 있습니다.

이는 일반적으로 동기화가 필요한 하드웨어에 클럭을 전송하는 하드웨어 제너레이터로 구성됩니다. 리얼타임 렌더링에 사용되는 PC의 경우, NVIDIA Quadro 제품군과 NVIDIA Quadro Sync II 카드 같은 수신된 타이밍 신호와 펄스에 고정되는 전문가급 그래픽 카드에서 이 기술을 지원합니다.

시스템 토폴로지

프라이머리 노드(하우스 클럭 제너레이터)

클러스터 노드(프라이머리 노드 GPU에서 클럭 수신)

디스플레이 동기화의 모든 것

  • 프레임록 전용: 여러 GPU에 걸쳐 데이지 체인(daisy-chaining) 기술을 사용하는 방법으로, NVIDIA에서는 보통 FrameLock/SwapSync 라고 부릅니다. 여기서는 젠록이 사용되지 않습니다. 프라이머리 nDisplay PC의 GPU는 연결된 출력 디스플레이 또는 프로세서에서 마스터 클럭을 구해서 렌더 노드 PC GPU로 전파합니다. 모든 PC는 트리 토폴로지로 연결되며, 여기서는 프라이머리 PC가 루트입니다. 이 방법을 사용하면 NVIDIA API를 통해 NVIDIA 스왑 그룹/배리어를 이용할 수 있습니다.

    이 접근법은 해당 공간 내에서 외부 마스터 클럭과 동기화되는 다른 모든 디바이스와 별도로 작동하기 때문에 버추얼 프로덕션에는 적합하지 않습니다.

  • 젠록 전용: 이 스키마에서는 모든 클러스터 PC GPU가 동일한 소스에서 각각의 마스터 클럭 신호(젠록)를 구합니다. 즉, 각 PC가 BNC 케이블을 가지고 있으며 모든 케이블이 동일한 마스터 클럭 제너레이터에 연결됩니다.

    이 방법을 사용하면 VSync 동기화가 가능하지만 NVIDIA API를 통해 NVIDIA 배리어를 이용하는 것은 불가능합니다. 기술적으로, 모든 클러스터 PC는 수신된 클럭에 프레임록됩니다. 하지만 애플리케이션 레벨에서 프레임 프레젠테이션을 정확하게 제어할 수 없기 때문에 이 접근법은 100% 안정적인 것으로 입증된 것은 아닙니다.

    이는 이전에 사용되었던 방법이며, 에픽이 동기화 해제/결함의 가능성을 줄이기 위해 '고급' 동기화 정책을 구현해야 했던 이유이기도 합니다.

  • 젠록 + 프레임록: 이 방식은 버추얼 프로덕션에 가장 적합합니다. 프라이머리 nDisplay PC GPU를 포함한 모든 스테이지 디바이스가 마스터 클럭에 연결됩니다. 클러스터 내 동기화는 프라이머리 PC와 렌더 노드 PC 사이의 데이지 체인 연결을 통해 이뤄집니다.

    이 접근법은 NVIDIA API를 사용하므로 NVIDIA 배리어를 활용할 수 있으며, 이는 곧 애플리케이션 레벨에서 프레임 프레젠테이션에 대한 UE 컨트롤을 제공한다는 것을 의미합니다. 따라서 제공된 외부 클럭(젠록)과 함께 디스플레이를 동기화하는 가장 안정적인 방법이라고 할 수 있습니다.

데이지 체인과 다이렉트 젠록 비교

데이지 체인 은 다이렉트 젠록(direct genlock)과 함께 사용되는 신호 잠금 기술입니다. 마스터 클럭이 단일 PC나 디바이스, 이 경우 프라이머리 PC로 전송됩니다. 그런 다음 별도의 케이블이 이 신호를 다른 모든 PC로 전파합니다. 이전의 nDisplay 경험을 고려하면 다이렉트 젠록(PC가 프라이머리 소스에서 클럭을 직접 수신하는 방식)이 데이지 체인보다 더 간단하고 효과적일 것 같지만, 데이지 체인을 바탕으로 하는 새 하드웨어 접근법을 통해 보다 안정적이고 비용 측면에서 효율적인 신호 잠금 솔루션을 확보할 수 있습니다. 이 솔루션은 NVIDIA Swap Sync/Lock 이라고 부릅니다.

NVIDIA Mosaic 및 AMD EyeFinity

서로 유사한 기술인 NVIDIA의 Mosaic 모드 와 AMD의 EyeFinity 는 하나의 그래픽 카드 내에서 여러 출력을 결합하고 동기화하여 OS 또는 소프트웨어 측면에서 고유한 디스플레이처럼 보이게 하는 GPU 기술입니다. 이 버추얼 디스플레이는 본질적으로 하나의 동기화된 디스플레이처럼 작동하는 여러 물리적 디스플레이를 결합한 것이며, 이 디스플레이 또한 기반이 되는 프레임록 또는 젠록 기술을 사용하여 다른 시스템의 디스플레이와 동기화될 수 있습니다.

하우스 클럭(house clock)을 사용하여 멀티 디스플레이를 잠그는 프로세스를 프레임 록킹(framelocking) 이라고 하며, 외부 클럭이 대신 사용될 경우 젠록킹(genlocking) 이라고 합니다. 젠록에서는 디스플레이 디바이스, 카메라, 트래킹 센서를 포함하는 모든 디바이스에서 외부 클럭이 사용됩니다.

GPU가 Quadro Sync II 카드 또는 Firepro S400 카드를 사용하여 올바르게 연결된 경우, Mosaic과 Eyefinity 기술은 여러 출력이 완전히 동일한 클럭을 제공받아 운영 체제 관점에서 하나의 커다란 디스플레이 캔버스로 취급될 수 있게 지원합니다. PC마다 하나 또는 여러 Mosaic 또는 EyeFinity 그룹을 생성할 수 있지만 한 그룹을 여러 PC에 사용하는 것은 불가능합니다. 각 PC는 반드시 자체적으로 Mosaic 또는 EyeFinity 그룹을 가져야 합니다.

여러 PC 또는 GPU로 구동되는 디스플레이를 데이지 체인 기술로 동기화하려면 GPU 하나가 마스터 클럭 제너레이터의 역할을 하면서 Nvidia Quadro Sync II 또는 AMD Firepro S400 같은 동기화 카드를 사용하여 클럭을 같은 PC나 다른 PC에 있는 다른 GPU와 공유해야 합니다.

자세한 내용은 멀티 디스플레이를 위한 Mosaic 기술 | NVIDIA멀티 디스플레이 EyeFinity 기술을 참고하세요.

PC 한 대의 여러 GPU에서 하나의 MOSAIC 가상 디스플레이를 스폰할 수도 있지만, 현재는 해당 캔버스 위로 애플리케이션 창을 띄우면 느려집니다. (향후 개선 작업을 통해 지원될 수도 있습니다.) 현재 이 접근법은 버추얼 프로덕션 또는 인카메라 VFX에서 권장되지 않습니다.

디스플레이 동기화의 기타 고려 사항

게임 및 렌더 스레드는 스레드 배리어(thread barrier)라고 부르는 것으로 항상 동기화됩니다. 이는 아래 두 항목의 핵심 기능입니다. 배리어를 비활성화하는 것은 불가능합니다. 스레드 배리어는 프라이머리 노드가 클러스터 노드를 동기적으로 처리하여 여러 UE PC에서 균일한 콘텐츠 경험을 제공하도록 지원하는 타임스케일의 포인트라고 생각하면 됩니다.

기능

설명

소프트웨어/시뮬레이션(보게 될 내용)

모든 소프트웨어 관련 요소를 동기화하는 프로세스로, 언리얼 엔진과 해당 콘텐츠가 올바르게 동기화되도록 만듭니다. 여기에는 기능 결정론, 델타 시간 동기화, 입력 리플리케이션, 커스텀 트랜스폼, 스레드 배리어, 클러스터 이벤트, 게임 로직 등이 포함됩니다.

하드웨어/OS(콘텐츠를 보는 방법)

하우스 동기화(house sync)나 젠록 신호 등 공유된 클럭을 사용하여 GPU, 디스플레이 디바이스, 데스크톱 창 관리자(DWM) 같은 하드웨어 디바이스를 동기화하는 프로세스입니다. 운영 체제와 하드웨어가 사용자가 원하는 것을 티어링 없이 동기적으로 표시하는 방식과 관련됩니다. NVIDIA Quadro 그래픽 카드, Sync II 카드 및 젠록 제너레이터가 필요합니다. 활성화되지 않는 경우 최소 1프레임의 하드웨어 딜레이가 발생할 수 있습니다.

렌더링 동기화 정책

렌더링 동기화 정책(Render Sync Policy)은 렌더링 출력의 동기화 방식을 정의합니다. 이 파라미터는 nDisplay 3D 환경설정 에디터(nDisplay 3D Config Editor)에서 해당 클러스터의 '디테일(Details)' 패널에서 설정할 수 있습니다.

다음 표에는 렌더링 동기화 정책 에서 사용할 수 있는 옵션이 정리되어 있습니다.

옵션

설명

없음(None)(동기화 정책 0)

VSync=0이라는 의미입니다. 모든 노드는 VBlank에 대한 동기화 없이 RenderThreadBarrier 뒤에 프레임을 표시합니다. 잠재적인 티어링 아티팩트 현상을 감수하고 최대 FPS를 제공합니다.

이더넷(Ethernet)(동기화 정책 1)

모든 노드는 VBlank에 대한 동기화와 함께 RenderThreadBarrier 뒤에 프레임을 표시합니다. 출력에서 티어링 현상이 나타나지 않습니다. 하지만 Windows DWM 및 런타임 또는 드라이버 세팅으로 인해 디스플레이 간에는 여전히 티어링 현상이 나타날 수 있습니다.

NVIDIA(동기화 정책 2)

데이지 체인 연결 기반의 NVIDIA 하드웨어 프레임록(NVIDIA SwapLock API)입니다. 이 파라미터를 NVIDIA 섹션에서 사용하여 프레임록과 관련된 특정 하드웨어 세팅을 세부적으로 조정할 수 있습니다.

  • 동기화 그룹(Sync Group): 프레임록에 사용하는 동기화 그룹입니다. 디폴트 값은 1입니다.

  • 동기화 배리어(Sync Barrier): 프레임록에 사용하는 동기화 배리어입니다. 디폴트 값은 1입니다.

커스텀(Custom)

nDisplay에서 파악하지 못한 모든 커스텀 동기화 정책을 환경설정합니다. 정책 ID 및 키/값 파라미터가 모두 필요합니다.

이전에는 지정된 nDisplay PC의 프레임 렌더링이 VBlank 이후에 발생하여 화면이 티어링 현상이 발생하는 특정한 상황에 대비하여 고급 동기화(Advanced Sync) 를 개발했습니다. 이 소프트웨어 메커니즘은 이러한 이벤트를 예측하여 모든 PC에서 다음 VBlank를 건너뛰고 렌더링하도록 강제합니다. 이 메커니즘은 100% 완벽하지 않으며, 활성화 시 퍼포먼스에 바람직하지 않은 영향을 미칠 수도 있습니다.

보다 최근에는 동기화에 사용할 수 있는 새로운 NVIDIA API(동기화 정책 2), 즉 이 같은 문제에 대한 하드웨어 지원 접근 방식을 구현했습니다.

FrameLockConnectionsTimingServer.png

타이밍 서버에 대한 프레임록 연결: 1) 타이밍 서버 2) 클라이언트

SyncSource.png

1) 동기화 소스 2) 서버 3) 클라이언트

동기화 작동

버추얼 프로덕션 컨텍스트 측면에서 안정적인 동기화를 보장하려면 젠록과 프레임록을 결합한 기술을 사용해야 합니다. 요약하자면, 젠록 신호를 프라이머리 nDisplay PC에 제공하고, 수신한 동기화 신호를 데이지 체인 하드웨어 메서드를 사용하여 나머지 모든 클러스터 PC에 전달하여 적절하게 프레임록되도록 합니다. 이렇게 하면 NVIDIA 렌더링 동기화 정책이 환경설정 에셋 내에서 적절하게 정의될 수 있습니다.

워크플로

  1. 통상적인 RJ45 커넥터를 갖춘 일반 이더넷 케이블을 사용하여 클러스터 GPU 동기화 보드 간에 데이지 체인 연결을 구성합니다.

  2. MOSAIC를 활성화하고 NVIDIA 제어 패널을 통해 동기화를 환경설정합니다. 프라이머리 PC부터 구성한 후 동기화 클러스터 노드를 설정합니다.

  3. nDisplay 3D 환경설정 에디터에서 해당 클러스터의 렌더링 동기화 정책NVIDIA 로 설정합니다.

  4. 선택 사항: 복잡한 시스템의 경우, 클러스터 세팅에서 NVIDIA 스왑 그룹 및 동기화 배리어를 커스터마이징할 수도 있습니다.

기본적으로 동기화 그룹 1과 동기화 배리어 1이 사용됩니다.

NVIDIA 렌더링 동기화 정책 클러스터 세팅은 클러스터 노드에서 NVIDIA 스왑 그룹을 활성화합니다.

추가 설명

값 0은 허용되지 않습니다. 값 0은 내부적에서 그룹/배리어를 디태치/유지하는 데 사용됩니다. 자연수만 허용됩니다. GPU 하나와 싱크 보드 하나를 갖춘 단순한 시스템의 경우 동기화 그룹 #1 하나와 싱크 배리어 #1 하나를 갖추게 됩니다. 기본적으로 이러한 구성이 사용됩니다.

동기화 테스팅

스케일 조절된 디스플레이에서 동기화를 테스트하는 것은 쉽지 않습니다. 동기화 해제가 다음과 같은 문제를 유발할 수 있기 때문입니다.

  • 부정확한 타임스탬프로 인해 잘못된 프레임이 시뮬레이션됩니다(소프트웨어 문제).

  • 디스플레이 디바이스의 타이밍이 어긋납니다(디스플레이 또는 하드웨어 문제).

동기화를 테스트하려면 전체 디스플레이 표면을 빠르게 가로지르는 단일 오브젝트를 표시하는 단순한 테스트 프로젝트를 사용합니다. 시스템이 올바르게 동기화되었다면 오브젝트가 경계를 지날 때도 그 형태를 유지합니다. 그렇지 않으면 디스플레이의 공유된 경계 부분에서 아티팩트가 나타납니다.

ScreenOneScreenTwo.png

시스템이 올바르게 동기화되었다면 오브젝트가 화면 1에서 화면 2로 지날 때도 그 형태를 유지합니다.

추가 정보 링크

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.