실감 심화편 nDisplay 멀티 디스플레이 셋업
GCC 사관학교
nDisplay의 이해
안녕하세요
오늘 nDisplay 멀티 디스플레이 셋업에 대한
강의를 진행하게 될 박지용입니다
이번 시간에는 nDisplay에 대해
학습해보려고 하는데요
아무래도 디스플레이가 커지고 다양해진 만큼
확장성을 가진 복수의 디스플레이를 잘 연결하고
재현하는 것이 중요합니다
그래서 기본적인 이론적인 내용을 학습한 뒤에
간단한 실습 과정을 통해서
실제 현장에서는 nDisplay 셋업이
어떻게 이루어지는지 확인해보시면 좋을 것 같습니다
언리얼 엔진의 nDisplay에 대해서 알아보겠습니다
nDisplay에서 n은 여러 뜻으로 해석될 수 있습니다
Network, 여러 컴퓨터와 디스플레이가
네트워크로 연결되어 협력하는 시스템입니다
네트워크를 통해 데이터를 동기화하고
실시간 렌더링과 출력이 이루어지는 점에서
네트워크로 해석할 수 있습니다
또 다른 의미로 다수를 의미할 수 있습니다
수학에서 흔히 사용하는 n은 임의의 다수를 의미합니다
nDisplay에서는 여러 디스플레이 또는
여러 노드를 제어하는 시스템이라는 점에서
다수의 디스플레이나 다수의 노드를 나타낼 수 있습니다
또 다른 의미로는 확장성이라 볼 수 있습니다
앞서 말한 바와 같은 맥락으로 n은 제한 없이
확장 가능한 시스템을 암시하기도 합니다
nDisplay는 여러 디스플레이와 컴퓨터를
추가적으로 연결하여
크고 복잡한 환경에서도 유연하게 동작할 수 있습니다
이 모든 것을 합쳐서 이야기하면
nDisplay에서 n의 본질적인 특징은
네트워크 기반의 다중 디스플레이 확장성을 상징합니다
이는 기술의 유연성과 확장성을 강조하는
요소로 볼 수 있습니다
이 nDisplay의 주요 기능에 대해서 살펴보겠습니다
앞서 이야기한 개념에서 연결된 내용이라 보시면 됩니다
nDisplay는 언리얼 엔진의
강력한 멀티 디스플레이 시스템으로
주로 대규모 디스플레이 환경을 효율적으로
구성하고 제어하는데 사용됩니다
이 시스템은 4가지 주요 기능을 통해
복잡한 멀티 디스플레이 환경에서도
강력한 성능을 제공합니다
첫 번째 주요 기능은 멀티 노드 렌더링입니다
nDisplay는 여러 대의 컴퓨터를
클러스터로 묶어 작업을 분산 처리하게 합니다
각 컴퓨터가 지정된 화면 부분을 처리하여
전체적으로 하나의 통합된 화면을 만들어냅니다
이러한 분산 렌더링은 복잡한 그래픽 계산을
효과적으로 처리하여 퍼포먼스를 올릴 수 있게 합니다
두 번째는 네트워크 기반의 동기화 입니다
nDisplay는 클러스터 내 모든 디스플레이와
컴퓨터 간의 완벽한 싱크를 제공합니다
프레임 싱크와 입력 싱크는 멀티 디스플레이 환경에서
화면의 플리커 현상이나 렌더 머신 간에
틀어지는 것을 방지합니다
세 번째는 카메라와 트래킹 시스템의 통합입니다
nDisplay는 버추얼 프로덕션에서 사용하는
다양한 트래킹 시스템과 연동됩니다
LED Wall 환경에서는 실시간 카메라 트래킹을 통해
액터와 촬영 장비의 움직임에 맞춰
화면을 조정할 수 있습니다
이는 물리적 환경과 버추얼 환경이 완벽히 동기화되어
몰입감을 높이는 데 중요한 역할을 합니다
마지막으로 디스플레이 구성과 관리의 유연성입니다
nDisplay는 직사각형 디스플레이 뿐만 아니라
다양한 형태에도 유연하게 적용할 수 있습니다
nDisplay config와 스위치보드 등을 사용해
디스플레이 레이아웃, 해상도, 클러스터 노드를
직관적으로 관리할 수 있습니다
이러한 nDisplay를 구현하기 위해서는
하드웨어와 소프트의 두 가지 요소가 필수적입니다
이 구성 요소들이 모두 유기적으로 작동해야
nDisplay 환경을 성공적으로 구축할 수 있습니다
좀 더 자세하게 알아보겠습니다
먼저 하드웨어 구성 요소입니다
nDisplay는 고성능 하드웨어 환경이 필수적이며
다음과 같은 요소들이 필요합니다
nDisplay는 NVDIA를 사용해야 하고
특히 Quadro Sync 카드가 필수적입니다
이 카드는 다중 디스플레이 간의
정확한 프레임 동기화를 지원합니다
그다음으로는 Genlock 입력입니다
LED Wall, 카메라 등 모든 장치에
동일한 Genlock 신호를 넣어야 됩니다
Genlock은 클러스터, 노드 간의 타이밍을 동기화하여
화면의 깜빡임이나 어긋나는 문제를 방지합니다
만약 Genlock이 설정되지 않는다면
nDisplay 자체가 기술적으로 불가능합니다
그 다음은 고속 네트워크입니다
모든 클러스터 노드는
동일한 네트워크 망에 접속돼야 됩니다
최적의 성능을 위해 최소 10Gbps 이상의
네트워크 속도를 권장합니다
네트워크 지연 속도가 낮아야
클러스터 간 데이터 전달이 원활해집니다
그 다음으로 소프트웨어적 구성 요소를 살펴보겠습니다
nDisplay 작동을 위해서는 언리얼 엔진 내의
도구와 설정이 필요합니다
첫 번째로 nDisplay config 파일입니다
config 파일은 클러스터를 정의하는
가장 중요한 요소입니다
렌더 노드, 디스플레이 위치, 해상도,
동기화 설정 등이 이 파일에 정의됩니다
config 파일을 정확히 작성해야
클러스터가 제대로 작동합니다
두 번째로 스위치보드 도구입니다
스위치보드는 여러 노드를 동시에 제어하는데 사용됩니다
클러스터의 실행, 중지, 재시작 등의 작업을
간편하게 수행할 수 있습니다
세 번째로 멀티 유저 기능입니다
nDisplay 환경에서 동시에 여러 사용자가
협업하기 위해 멀티 유저 설정이 필요합니다
이를 통해 각 노드에서 플레이된 요소들을
실시간으로 편집하고 테스트할 수 있습니다
이처럼 nDisplay를 성공적으로 구현하기 위해서는
하드웨어와 소프트웨어에 올바른 조합이 필요합니다
Genlock과 네트워크 동기화, config 파일 작성,
스위치보드 및 멀티 유저 기능을 활용하여
안정적이고 일관된
멀티 디스플레이 환경을 구축할 수 있습니다
다시 말하자면 nDisplay는 언리얼 엔진을 활용하여
멀티 디스플레이 환경을 구축하고 제어하는 시스템입니다
그 동작 원리는 다음과 같은 단계로 이루어집니다
첫 번째, nDisplay config 파일 구성입니다
먼저 nDisplay config 파일을 생성하고
클러스터 환경을 정의합니다
이 파일에는 각 노드의 역할, 디스플레이 설정,
네트워크 구성 등이 포함됩니다
정확한 설정을 위해서 언리얼 엔진에서 제공하는
config 레퍼런스를 참고해서
정확히 기입해야 합니다
하나하나 기입하는 내용들은
중요한 명령어 역할을 하기 때문에
어떠한 항목이 어떤 역할을 하는지도 알고 있어야 합니다
두 번째는 네트워크 연결 및 동기화 설정입니다
각 노드와 디스플레이를 동일한 네트워크에 연결하고
동기화 설정을 진행해야 됩니다
이를 통해 모든 노드가 동일한 타이밍으로 작동하며
프레임 동기화와 입력 동기화가 이루어집니다
세 번째로는 nDisplay 플러그인 및
기본적인 프로젝트 설정 구성입니다
언리얼 엔진에서 nDisplay 플러그인을 활성화하고
프로젝트를 구성합니다
이 단계에서는 nDisplay와 관련된 설정을 확인하고
필요한 경우 추가적인 플러그인이나
설정을 적용해야 합니다
네 번째로는 스위치보드를 사용한 실행 및 디버깅입니다
스위치보드를 사용하여 클러스터를 실행하고
디버깅을 진행합니다
스위치보드는 여러 노드를 동시에 제어하고
상태를 모니터링 해야 합니다
이러한 과정을 통해 nDisplay는
버추얼 프로덕션 환경을 작동하게 합니다
이번에는 nDisplay 사용 시 고려사항으로
몇 개의 노드를 구성해야 하는지
해상도 설정은 어떻게 하면 될지 알아보겠습니다
이러한 구성을 바탕으로 하는 것은
철저한 계산 아래의 설정이 되는데요
nDisplay config는
소프트웨어적 설정에서 끝나는 게 아니라
이러한 config가 하드웨어의 명령을
수행하게 하기 때문에
실질적인 하드웨어 구성 및
수량에도 직접적인 연관이 있습니다
이러한 설정의 기준은 LED 패널의 제품 스펙과
LED Volume의 크기에 따라 다릅니다
예를 들어 ROE 제조사의 Ruby 2.2 패널로
너비 14m, 높이 6m의 LED Wall을
구성한다고 가정해 보겠습니다
Ruby 2.2는 너비 50cm, 높이 50cm,
한 개 패널당 해상도는 448×448 입니다
LED Wall 전체로 봤을 때 너비 14m의 경우
6272 pixel을 가지고 있고
높이 6m의 경우 2688 pixel을 가지고 있습니다
렌더 머신, 노드의 경우 한 대당 최대 아웃풋을
3840×2160을 기준으로 합니다
그렇기 때문에 전체 LED Wall의
아웃풋을 커버하기 위해서는
이미지처럼 총 3개의 렌더 노드가 필요한 겁니다
물론 이 이미지처럼
2개의 렌더 머신만 사용할 수도 있습니다
다만 이렇게 사용할 경우 세로 해상도가
528 pixel이 모자르게 됩니다
렌더 머신 한 대당 금액이 매우 비싸기 때문에
때때로 너무 높은 해상도가 필요하지 않을 경우
해상도가 살짝 낮아지는 것을 감안하여 사용하기도 합니다
이러한 nDisplay 구성은 하드웨어 규모와 예산
그리고 사용 목적에 따라 고려되는 것이 달라집니다
앞에서 말씀드렸듯 nDisplay는
대규모 디스플레이 환경에서
실시간 콘텐츠를 확장하고 동기화하는 강력한 도구입니다
그러나 이를 효과적으로 사용하기 위해서는
기술적 한계와 주의사항을 명확히 이해하고
적절히 대처하는 것이 중요합니다
nDisplay 환경에서 가장 중요한 요소는
여러 번 이야기했듯 Genlock입니다
Genlock은 모든 디스플레이와 카메라
그리고 클러스트 노드 간의
정확한 타이밍을 맞추는데 필수적입니다
만약 Genlock이 제대로 설정되지 않으면
다음과 같은 문제가 발생할 수 있습니다
첫 번째로 프레임 어긋남으로 인해
화면이 부드럽게 연결되지 않을 수 있습니다
두 번째로 디스플레이 간 타이밍 불일치로 인해
화면 깜빡임, 플리커가 발생할 수 있습니다
이러한 문제를 방지하려면 각 노드에
NVDIA quadro sync 카드 또는
유사한 동기화 장치를 설치해야 합니다
Genlock 동기화 문제를 해결하기 위해서
다양한 의견이 있습니다
Genlock 문제로 인해 발생하는 문제를 마주하게 되면
정말 수많은 원인이 존재하기 때문에
해결하는 것은 결코 쉬운 일이 아닙니다
특히 세팅 처음에는
문제가 없는 것을 확인하고 진행하지만
어느 순간 Genlock에 문제가 있는 것을
발견할 때도 많습니다
시간이 지남에 따라 틀어지는 경우도 있고
별다른 행동을 하지 않더라도 해결될 가능성도 있습니다
특히 해당 부분은 많은 경험을 통한
트러블 슈팅의 경험을 쌓는 것이
매우 중요하다고 생각합니다
nDisplay는 클러스터 노드와
실시간 통신을 통해 동작합니다
따라서 네트워크 성능이 곧
시스템의 안정성을 좌우하는데요
권장되는 네트워크 대역폭은 최소 10Gbps입니다
만약 네트워크 성능이 부족하거나 레이턴시가 높으면
문제가 높을 수가 있습니다
예를 들어 클러스터 간 데이터 손실로 인해
출력되는 화면이 일관되지 않을 수 있습니다
또는 프레임 불일치 또는
렌더링 지연이 발생할 수도 있습니다
물론 이러한 부분을 해결하기 위한 가장 좋은 방법은
네트워크에 대해 잘 아는 사람이 함께 세팅하는 것입니다
다만 네트워크 자체를 잘 안다 하더라도
nDisplay 노드 간 구성과
역할에 대해 잘 알지 못하기 때문에
함께 협업하여 구성하는 것이 매우 중요합니다
고려사항으로는 모든 클러스터 노드가
동일한 네트워크 망에 연결되어야 하며
독립된 네트워크 스위치를 사용하는 것이 좋습니다
또한 네트워크 최적화를 위해 불필요한 트래픽을 줄이고
노드 간 패키지 손실 방지를 위해
방화벽 설정도 꼼꼼하게 점검해야 됩니다
다음으로 소프트웨어 및 시스템 한계에 대해 말씀드리겠습니다
nDisplay는 언리얼 엔진의
결정론적 시스템을 기반으로 작동합니다
하지만 일부 언리얼 엔진의 기능은
완전한 결정론적 특성을 가지고 있지 않습니다
예를 들어 복잡한 물리엔진, 리지드 바디,
소프트 바디, 스켈레톤 등의 시뮬레이션은
렌더 요소로 인해 동기화 문제가 발생할 수 있습니다
예시로 예전에 나이아가라를 활용하여 진행했을 때
렌더 머신마다 렌더링 타이밍이 달라서
이런 불특정 렌더에 대한 설정을 끄고서야
동기화 이슈를 해결할 수 있었습니다
또는 비결정론적 블루프린트 부분으로
무작위 요소를 포함한 블루프린트는
노드 간 비일관성을 유발하여 문제를 발생시킵니다
이런 문제를 해결하려면 복잡한 물리나
렌더 요소를 포함한 프로젝트에서는
Replication 설정을 적용해야 합니다
또한 주요 시뮬레이션 데이터는 주 노드에서 계산하고
이를 클러스 노드에 배포하는 방식으로 처리해야 합니다
다음으로 nDisplay는 다중 디스플레이가
렌더링 경계를 처리할 때 문제가 발생할 수 있습니다
포스트 프로세싱 효과 중 Bloom, Motion Blur,
안티에이징과 같은 화면 기반 효과는
디스플레이 경계에서 불일치가 발생할 수 있습니다
해결 방법으로는 포스트 프로세싱 효과를 최소화하거나
비활성화 해야 됩니다
특히 Bloom, Lens Flare,
Motion Blur, Ambient Occlusion 등의
사용에 주의가 필요합니다
nDisplay는 대규모 프로젝트에 적합하지만
콘텐츠에 적합하지 않습니다
따라서 사용자는 각 노드에
프로젝트 파일을 수동으로 배포하거나
별도로 배포하는 툴을 사용해야 됩니다
물론 언리얼 엔진에서는 이를 해결하기 위해
스위치보드와 리스너를 활용하여
노드 간 프로젝트 동기화를 할 수 있습니다
올바른 동기화를 하기 위해서는
정확한 config 설정이 필수적입니다
기타 주의 사항으로는 nDisplay 시스템에서
하나의 노드가 장애를 일으키면
전체 클러스터의 동기화가 깨질 수 있습니다
따라서 노드 장애를 감지하고 빠르게 복구할 수 있는
모니터링 시스템을 운영하는 것이 필수적입니다
이는 큰 볼륨, 많은 노드를 가지고 있을수록
쉽게 겪을 수 있습니다
그래서 정확한 책임자 배정과 관리가 필요합니다
이를 통해 스위치보드를 사용하여
각 노드의 상태를 지속적으로 확인할 수 있습니다
문제가 발생했을 때는
즉시 로그를 확인하고 진행해야 합니다
이처럼 nDisplay는 강력하지만 복잡한 기술입니다
이를 최적화하고 효율적으로 사용하려면
하드웨어, 소프트웨어, 네트워크, 콘텐츠 개발 과정에서
발생할 수 있는 모든 문제를 사전에 대비해야 합니다
Config 제작 방법
이번에는 nDisplay 실습을 한번 진행하도록 하겠습니다
차근차근 하나씩 같이 진행해 볼 텐데요
하나씩 따라오시면 좋을 것 같습니다
기본적으로 이번 시간에는 저희는
언리얼 V5.3.2를 사용할 거고요
실행 한번 해보겠습니다
이제 보시면 저희는 일반적으로 제공하는
셋업을 한번 사용해 볼텐데
여기서 Blank를 한번 사용해 보도록 하겠습니다
Starter Content는 제외시켜 주시고요
그리고 저희가 지금 퍼포스 연동된 경로는
D드라이브에 Perforce 폴더가 있기 때문에
계승하시고 이름을 ndc_test로 시켰습니다
그래서 Create를 누르겠습니다
기본적으로 NDC를 하기 위해서는
기본적인 프로젝트 세팅이 필요합니다
첫 번째로는 플러그인 세팅을 진행해야 됩니다
지금 저희가 샘플로
인카메라 VFX 관련된 샘플을 열었기 때문에
대부분 켜져 있긴 하지만 한번 확인하도록 하겠습니다
주루룩 내려가시면 기본적으로 저희가
Virtual Production이라는 탭을 볼 수 있습니다
해당 탭을 누르시면 저희가 사용할 플러그인을
찾아볼 수 있습니다
보시면 제가 주로 사용하는 것 중에서는
하나씩 켜보겠습니다
Camera Calibration 플러그인 켜보시고요
DMX 같은 경우도 저희가 자주 사용하긴 하지만
지금은 저는 제외하고 넘어가겠습니다
여기서 ICVFX라는 플러그인 켜주고요
그리고 Led Wall Calibration
LevelSnapshots
그리고 LiveLink 관련된 것들이 있는데
저희가 어떤 트래킹 장비를 사용하는지에 따라 다르고요
그래서 LiveLinkCamera, FreeD
이렇게 설정해 보겠습니다
이제 이거는 로컬에서 한번 진행할 때 쓰는거고요
한번 켜볼게요
쭉 넘기면 Stage Monitor
Stage Monitor 같은 경우는 각 연결된 머신들의
퍼포먼스를 확인할 수 있는 플러그인이고요
Switchboard
싱크에 관련된, Data Monitor
이런 식으로 켜주겠습니다
여기까지 했으면 추가적으로
Multi-User Editing이 켜져 있는지 한번 확인을 하고요
Take Recorder 켜져 있는지 확인하고
이제 기본적인 게 다 끝났으면
여기서 리스타트를 진행해야 됩니다
플러그인 세팅이 끝났으면
프로젝트 세팅에 들어가 보겠습니다
좀 다양하게 설정할 수 있는 부분이 많긴 한데
우선 오늘은 정말 기본적인 간단한 것만
한번 보도록 하겠습니다
Input에 보면 모바일 쪽에
Always Show Touch Interface가 있습니다
이걸 꺼야 됩니다
만약에 이 친구를 끄지 않는다고 하면
NDC를 실행했을 때 화면 좌우측에 터치
원형의 터치 페이스가, 인터페이스가 보이게 됩니다
가장 중요한 UDP 세팅이 있습니다
저는 여러 가지 IP가 지금 여기 있는데
127.0.0.1은 제가 설명드렸던 것처럼 내부 루프백이고요
192는 지금 제가 쓰고 있는 내부망
20.20.0은 지금 제가 구성해놓은
내부 인터넷 네트워크 망입니다
이걸 사용하겠습니다
이렇게 정확하게 Unicast를 입력하는 게 좋습니다
그다음으로 할 수 있는게 Multi-User Editing
여기서 Toolbar Button을 켜는 거고요
Server Type은 Console로 바꾸겠습니다
이제 여기까지가 기본적인 언리얼인데
사실 NDC를 구동하기 전에 윈도우에서 추가적으로
세팅해야 될 부분이 정말 많습니다
저는 총 2대의 컴퓨터를 사용할 예정이고요
한 대는 메인 오퍼레이팅을 진행할 예정이고
지금 현재 컴퓨터입니다
또 다른 한 대는 렌더 노드 역할을 하게 될 겁니다
렌더 노드 같은 경우는 NDC를
실제로 실행하는 역할을 하게 됩니다
이제 이런 것들 2대에 대한 멀티 세팅
세팅값이 있는 것을 저희는
nDisplay Config를 통해서 진행합니다
이걸 저희는 줄여서 NDC라고 하고 있습니다
이 NDC는 기본적인 Config이긴 한데
이걸 하기 전에 저희가 렌더 머신에서
실제로 사용하는 부분에 대한 세팅이 필요합니다
이 부분을 진행하겠습니다
이거에 대한 조정은 VNC 통해서 진행하도록 하겠습니다
지금 보시면 이 친구는 원격의 컴퓨터입니다
기본적으로 저희가 여기서 해야 될 부분은 첫 번째로는
기본적인 그래픽 카드에 대한 설정이 필요합니다
여기 들어오시는 기본적인 모든 설정을
시스템 토폴리지에서 볼 수가 있는데 하나씩
올바른 설정값을 해보겠습니다
3D 설정 들어오시면 저는 Workstation의
Advanced Streaming을 사용하고 있고요
추가적으로 한 가지 더 확인해야 될 것은
전원 관리 모드에서 최고 성능을 선호하는 걸로
잘 되어 있는지 확인하시면 되고요
지금 저희 컴퓨터에는
NVDIA RTX A6000 카드가
총 2장 설치가 되어 있고
이 모든 것은 이미지 프로세서
Tessera SX40으로 가고 있습니다
저희는 그 최적화하고 성능을 확대하기 위해서
SLI 구성을 해서 2개 연결해서 같이 사용하고 있습니다
해상도는 3840×2160이 주로 사용되고 있고
24프레임으로 저희는 사용할 것이기 때문에
재생 빈도를 24로 설정해 줘야 됩니다
그 다음으로는 여기까지 됐다고 하면
디스플레이 동기화를 클릭해 줍니다
NDC에서 가장 중요한 부분이
Genlock이라고 제가 계속 말씀을 드렸는데
Genlock은 이런 식으로 해야 되는데
저희 총 한 대만 사용하기 때문에
외부에서 넣고 있는 Genlock 신호를 여기서
이 시스템을 클릭하신 다음에
전 지금 외부 하우스 동기 신호를
넣고 있는 상태이기 때문에
얘를 클릭하고 적용
확인을 누르시면 동기화가 됩니다
총 2대를 사용한다고 했었는데
이 2대는 동일한 네트워크에 설정이 되어 있어야 됩니다
확인하기 위해서
지금 메인 컴퓨터의 IP를 확인해 보겠습니다
20.20.0.10번이죠 VNC로 다시 들어가 봐서
현재 컴퓨터는 20.20.0.20점을 쓰고 있습니다
그렇기 때문에 여기서 ping을 한번 날려 볼게요
저희 렌더 머신이 아니라 메인 머신으로 쏴 보면
이런 식으로 Ping이 통하는 것을 볼 수 있습니다
이렇게 되면 기본적인 것은 끝나긴 했는데
추가적으로 저희가 한번 확인하면 좋을 것이 이제
네트워크 설정에 들어가시면
제가 쓰고 있는
내부망에 대한 그 상태를 보겠습니다
지금 전 10Gbps로 구성을 해놔서
속도가 10Gbps가 나오는 것을 볼 수가 있으십니다
이런 식으로 10Gbps 이상으로
네트워크 망을 구성해 주시면 좋습니다
일반적인 외부망 같은 경우는 1Gbps로 되어 있습니다
nDisplay Config 설정
이번에는 실제로 NDC를 한번 설정해 보겠습니다
기본적으로 아무것도 없는 프로젝트에
한번 진행해 볼 텐데요
첫 번째로
진행할 것은 폴더 및 경로를 만드는 것입니다
모든 작업은 혼자 하는 게 아니라
다른 사람들이랑 같이 하는 것이기 때문에
정확하게 정해진 폴더 경로를 항상
그대로 사용하는 것을 추천드립니다
정확한 경로로 하는 것은 매우 중요합니다
Content 폴더에다가 폴더를 만들어 보겠습니다
vp 폴더를 만드신 다음에, 여기에 여러 가지 만들 텐데요
첫 번째로는 livelink
그 다음으로는 NDC
그 다음으로는 oCIO를 만듭니다
이거 외에도 더 많긴 한데
이번엔 정말 기본적인 것만 해보도록 하겠습니다
처음으로 저희가 NDC 를 설정할 텐데요
우클릭을 하신 다음에
nDisplay > nDisplay Config가 있습니다
여기서 클릭을 하시면
기존에 있던 것을 가지고 올 것인지
새로 만들 것인지 확인할 수 있습니다
이번엔 저희는 새로운 걸 한번 만들어 보겠습니다
이름을 별도로 지어 주시고요
항상 네이밍은 중요합니다
그래야지만 다른 사람들이 같이 해볼 수 있습니다
다른 사람 작업할 때 문제가 없습니다
Config를 한번 열어 보겠습니다
이제 Config를 열면 이런 식으로
이미 지정된 하나의 UI가 나오고요
전반적으로 설명만 드리겠습니다
여기 상단에 있는 것들은
일반적으로 언리얼에 사용하는 것들의
기본적인 기능들이 있고요
Blueprint > Components > Cluster
기본적인 프리뷰
그리고 실제로 나중에 아웃풋 할 때에 대한
매핑을 할 수 있는 매핑 창이 있고요
여기 오른쪽에는 제가 선택한 것에 대한
Details 설정 창을 볼 수 있습니다
보시면 먼저 이렇게 기본적인 부분이 있는데
얘를 탑재하겠습니다
강의에서 말했던 것처럼 메시 파일은 엄청 중요한데요
어떤 파일을 쓸지에 따라서 매우 달라집니다
제가 가장 많이 쓰는 웹사이트인데요
기본적인 패널에 대한 정보
LED Wall에 대한 정보를 입력하면
OBJ로 출력을 바로 해주는
지금 테스트로 10m에 4m
Tile angle은 LED 패널마다의 각도를 말하는데
이번에 저는 2도로 한번 해보겠습니다
패널 당 넓이와 높이는 500×500
해상도는 192
192로 하겠습니다
기본적인 Position Offsets를 여기서 설정할 수 있고
이제 Pivot point를 여기서 설정할 수 있습니다
이 상태에서 Download OBJ를 해보겠습니다
이런 식으로 기본적인 OBJ 파일을
저희가 확인할 수가 있고요
여기서 폴더 하나를 더 만들어서
mesh 폴더를 만들겠습니다
mesh 폴더에 저희가 방금 만든 OBJ 파일을 입력합니다
여기서 여러 가지 설정을 진행할 수 있는데
저는 오늘은 간단하게
디폴트 값으로 진행하도록 하겠습니다
다시 NDC로 넘어가겠습니다
이제 저희가 실제로 사용할 LED 메시가 필요한데요
방금 메시는
여기서 끌고 올 수 있도록 하겠습니다
보시면 지금 잘 보이지 않죠?
이게 아마 크기가 달라서 그럴 텐데
이런 수치의 기준값이 다르기 때문에
여기 Scale을 조정하면 만지실 수 있으십니다
이런 식으로 만드신 다음에
보시면 여기 바닥에 미터가 나와 있습니다
플러스, 마이너스 이렇게 있는데
그래서 제가 바라보는 이 부분이 정면이라고 생각하시면 됩니다
그리고 이 거리는 매우 중요한데요
이 거리의 기점은 어떤 기점이냐면
이 원점이 트래킹 데이터의 원점이라고 가정을 하고
트래킹 데이터의 원점과 LED의 실제 거리가
8m다 하면
8m를 띄우는 것이 매우 중요합니다
가상 세계의 원점과 실제 세계 원점을
맞추는 과정이라고 보시면 되고요
여기서 추가를 할 것은 NDisplay Transform
입력을 하시고
ICVFX Camera를 추가적으로 같이 넣어주게 됩니다
이 상태가 됐으면 기본적인 설정은 완료가 된 거고요
Origin까지 추가적으로 넣어준 다음에
이 친구를 어떤 클러스터 어떤 노드에
렌더를 시킬지를 여기서 명령을 해 줄 수 있습니다
저희는 한 대의 노드만 가지고 있기 때문에
한번 만들어 보겠습니다
이름은 main_wall_node라고 진행한 다음에
Cluster가 Parent고 Preset은 이렇게 있습니다
여기 보시면 이거는 여기에서 조정할 수가 있는데요
저희는 기본적으로
한 아웃풋당 3840×2160을 하고 있기 때문에
3840×2160을 기입을 해주시고요
여기에 Host IP가 필요한데
이거에 대한 IP는 아까 렌더 머신에 노드를
그 IP를 입력해 주면 됩니다
그리고 항상 Fullscreen으로 되어야 되기 때문에
전체화면이 되게끔 이걸 체크해 주면 됩니다
이제 이외에 세팅들 추가적으로 있는데 이거는
다음 기회가 된다면 말씀드릴 수 있도록 하겠습니다
그래서 Add를 누르시면
여기 OutputMapping에 추가가 됩니다
여기 보시면 해상도를 확인할 수가 있고
그 렌더 노드의 IP 주소를 확인할 수 있습니다
지금 보시면 이렇게 검은색 화면이 나오는데
이 매핑된 영상이 어디에 나올지에 대한
메시 설정이 안 되어 있어서
검은색으로 되어 있는데 보시면
Projection Policy에서 메시를 선택하시고
저희가 만들어 놓은 이 메시가 여기 있을 겁니다
클릭하시면 이런 식으로 매핑이 되게 됩니다
다만 저희가 실제로 쓸 LED Wall의 메시는
192 해상도 패널이 10m로 2개가 들어있기 때문에 3840
세로가 192 곱하기
2개 패널을 붙였으니까 2에
4m니까 4를 곱하면 1536입니다
그렇기 때문에 이 3840은 동일한데
이 1536을 바꿔줘야 됩니다
보시면 여기서 이거를 1536으로
이거를 1536으로 변경을 해줍니다
이렇게 되면 1:1 픽셀로
아웃풋을 내보낼 수 있다는 걸
확인할 수가 있습니다
보시면 여기서 추가적으로 저희가
몇 개 더 설명 드릴 수 있는데요
우선은 이 부분들은 실제로
렌더 머신이 여러 대 있을 때
의미가 있는 부분들이긴 하지만
간략하게 몇 개 중요한 부분 말씀을 드리면
기본적으로 여기 Render Sync Policy가
ethernet이 기본적인 설정값입니다
근데 퍼포먼스적으로 더 나은 설정은 Nvidia입니다
이거는 여러 대의 렌더를 사용할 때
이걸 선택해서 진행하시면 되고요
이거 자체가 그래픽 카드의 퍼포먼스를 올리고 줄이는데
크나큰 역할을 하고 있습니다
여기까지 완료됐으면 Compile 누르시고 나갑니다
이제 이 상태에서 추가적으로 할 것은
NDC Config을 여기다 올려줍니다
이렇게 되면 nDisplay가 나오고
화면에 맺힌 부분
아웃 프러스텀과 이너 프러스텀을 확인할 수 있습니다
보시면 이제 이런 식으로 되어 있는데요
저 같은 경우는 기본적인 액터 하나를 추가한 다음에
이 친구를 ndc_origin으로 설정합니다
그래서 이 친구를 여기 하위에 넣고요
이런 식으로 origin을 통해서
NDC의 위치값을 조정하는 편입니다
여기까지 됐으면 추가적으로 해줘야 될 게 있습니다
결과적으로 이 이너 역할을 할
별도의 카메라가 필요한 상태인데요
그 카메라는 여기에서 Cinematic에서
Cine Camera Actor를 클릭해서
액터를 추가해줍니다
이 액터를 마찬가지로
nDisplayConfig 하위에 놔두고요
저같은 경우는 추가적으로
acamera_origin을 만든 상태에서
카메라 액터를 오른쪽에다가 넣습니다
하고 나서는 이거에 대한 origin을
무조건 원점으로 돌려놓습니다
이걸 하는 이유는 감독님마다
이너의 위치를 조금씩 바꾸길 원하실 때가 있는데
트래킹 데이터로 묶여 있으면 조정이 불가능하기 때문에
이 origin을 통해서 조정하고 있습니다
여기까지 됐으면 NDC에서 카메라 설정을 해줘야 됩니다
보시면 아까 제가 이너 NDC에서 설정한
이 이너 ICVFX Camera가 있는데
이걸 클릭하신 다음에
어떤 카메라 액터를 이 역할로 할당할 것인지
클릭해 주시면 할당이 끝났습니다
예시로 보면 이 카메라를 움직이게 되면
이런 식으로 이너가 바뀌게 됩니다
테스트로 몇 가지 넣어보면
이 이너 카메라 잡고 있는 이 친구의 모양의 위치가
이런 식으로 방금 된 것을 확인할 수 있습니다
이제 여기까지 기본적인 NDC 세팅이었습니다
이 이외에 NDC의 핵심적인 요소들은
첫 번째로 CIO
두 번째는 라이트 카드
세 번째로는 크로마 설정 등이 있습니다
다양하고 디테일한 설정들이 많은데
이것들은 개인적으로 혼자
추가적으로 공부를 해보시면 좋을 것 같습니다
이렇게 해서 오늘
nDisplay 멀티 디스플레이 셋업에 대한
강의를 마무리 하겠습니다
nDisplay는 버추얼 프로덕션에서
중요한 역할을 하고 있습니다
오늘 배운 기본 이론 및 실습 내용이
실제 프로젝트에 적용이 될 때
안정적인 결과로 이어갈 수 있는 도움이 되었으면 합니다
nDisplay를 활용하는 과정에서
여러 기술적 도전이 있을 수 있지만
그만큼 보람있는 결과를 얻을 수 있습니다
그럼 이번 시간 학습한 내용을 복습하면서
마무리 하겠습니다
감사합니다
nDisplay의 이해 nDisplay 언리얼 엔진의 강력한 멀티 디스플레이 시스템으로 대규모 디스플레이 환경의 효율적 구성 및 제어에 활용됨
nDisplay의 주요 기능 멀티 노드 렌더링 네트워크 기반 동기화 카메라와 트래킹 시스템의 통합 디스플레이 구성 및 관리의 유연성
nDisplay 하드웨어 구성 요소 NVDIA Quadro Sync 카드, Genlock 지원, 고속 네트워크
nDisplay 소프트웨어 구성 요소 nDisplay config 파일, SwitchBoard 도구, 멀티 유저 기능
nDisplay 동작 원리 단계 nDisplay config 파일 구성 네트워크 연결 및 동기화 설정
nDisplay 플러그인 및 기본적인 프로젝트 설정 구성 SwitchBoard를 사용한 실행 및 디버깅
nDisplay의 한계 Genlock 및 동기화 이슈 네트워크 성능 제한
결정론적 시스템의 한계 다중 디스플레이 간 렌더링 경계 처리 시 문제 발생 콘텐츠 개발 및 배포의 한계
Config 제작 방법 플러그인 세팅 설치한 플러그인으로 Virtual Production, Camera Calibration, ICVFX, Led Wall Calibration,
LevelSnapshots, LiveLinkCamera, LiveLinkFreeD, nDisplay Launch, Stage Monitor, Stage Monitor 선택
Multi-User Editing, Take Recorder 활성화 확인
프로젝트 세팅 Engine > Input < Mobile > Always Show Touch Interface 항목 체크 해제
Plugins > UDP Messaging > Transport > Unicast Endpoint 설정
Plugins > Multi-User Editing > Toolbar Button 활성화 Server Type은 Console로 설정
렌더 머신 실제 실행 부분 세팅 F3D 설정 관리에서 전원 관리 모드를 최고 성능 선호로 설정 SLI 및 PhysX 구성 설정에서 3D 성능 극대화 확인
해상도 3840×2160, 재생 빈도 24Hz 설정 및 디스플레이 동기화 선택 타이밍 서버에 이 시스템 항목 선택 후 외부 하우스 동기 신호 선택 후 적용 및 확인
사용하는 2대의 컴퓨터의 네트워크가 동일하도록, 속도는 10Gbps 이상이 되도록 설정
nDisplay Config 설정 nDisplay Config 설정 Content 폴더에 새 폴더 생성 후 0_vp로 이름 설정
0_vp 폴더에 livelink, ndc, ocio 폴더 새로 생성 ndc 폴더에 Create New Config 선택 후 test_nDisplay Config로 이름 설정
ObjGen [beta]에서 LED Wall 정보 입력 후 Download OBJ 클릭 ndc 폴더에 mesh 폴더 새로 생성 후 mesh 폴더에 obj 파일을 드래그 앤 드롭
mesh 폴더의 obj Mesh를 test_nDisplay Config의 컴포넌트로 등록
NDisplay Transform, ICVFX Camera, NDisplay View Origin 컴포넌트 추가
Cluster Node 추가 후 main_wall_node로 이름 설정 해상도는 3840×2160, IP 주소는 렌더 머신과 동일하게, Fullscreen 체크 설정
Details 창 Projection Policy의 Type을 Mesh로 변경 후 Mesh에 obj mesh 적용
main_wall_node, VP_0의 사이즈를 패널 크기에 맞게 변경