이 퀵스타트 가이드에서는 Blackmagic Design의 전문 비디오 카드로 작업할 수 있도록 언리얼 엔진 프로젝트를 세팅하는 방법을 소개합니다. 이 가이드를 마치면 다음과 같은 일을 할 수 있습니다.
언리얼 엔진 프로젝트 안에서 Blackmagic 카드의 비디오 입력을 재생할 수 있습니다.
에디터와 런타임 애플리케이션 모두에서 카메라 뷰포인트를 캡처하여 Blackmagic 카드의 SDI 포트에 전송할 수 있습니다.
렌즈 디포메이션 보정, 크로마 키 이펙트 적용 등 비디오 입력에 고급 조정을 구성하고 싶을 때 어디로 가야 하는지 알게 됩니다.
아래 설명한 요소를 실전에 활용한 작동 예제는 에픽게임즈 런처의 샘플 탭에 있는 Virtual Studio 쇼케이스를 확인하세요.
전제 조건:
Blackmagic Design의 지원 카드가 있는지, 필수 드라이버와 소프트웨어를 설치했는지 확인합니다. 자세한 내용은 Blackmagic 미디어 레퍼런스 페이지를 참조하세요.
카드가 정상 작동하는지, 카드의 SDI 포트 최소 하나에 비디오 입력 피드가 되고 있는지 확인합니다.
비디오 피드와 통합하려는 언리얼 엔진 프로젝트를 엽니다. 여기서는 삼인칭 블루프린트 템플릿을 사용해서 단계를 안내하지만, 어떤 프로젝트에서도 동일한 단계는 똑같이 작동할 것입니다.
이 가이드에 사용된 Blackmagic Design 컴포넌트는 미디어 프레임워크 기반으로 만들어졌으며, 런타임에 비디오를 캡처하는 프로세스의 스크립트는 블루프린트를 사용합니다. 이와 관련해서 있으면 좋은 사전 지식이 있기는 하지만 필수는 아닙니다.
1 - 프로젝트 구성
Blackmagic 카드에서 언리얼 엔진 레벨로 비디오 입력을 받고, 언리얼 엔진에서 Blackmagic 카드의 SDI 포트 중 하나를 통해 출력을 전송하기 전에, 프로젝트에서 Blackmagic Media Player 플러그인을 활성화하는 몇 가지 기본 구성 작업을 해야 합니다.
영화, TV 및 라이브 이벤트(Film, Television, and Live Events) 카테고리의 템플릿 중 하나에서 언리얼 엔진 프로젝트를 시작한 경우, 해당 플러그인이 이미 활성화되어 있을 수 있습니다. 그렇지 않다면 아래 지침에 따라 활성화합니다.
단계
언리얼 에디터에서 Blackmagic 비디오 입출력에 사용하려는 프로젝트를 엽니다.
메인 메뉴에서 편집(Edit) > 플러그인(Plugin)을 선택합니다.
플러그인(Plugin) 창에서 미디어 플레이어(Media Players) 카테고리 아래의 Blackmagic Media Player 플러그인을 찾습니다. 활성화됨(Enabled) 체크박스를 체크합니다.
미디어(Media) 카테고리의 미디어 프레임워크 유틸리티(Media Framework Utilities) 플러그인을 찾습니다. 아직 선택되어 있지 않은 경우 활성화됨(Enabled) 체크박스를 체크합니다.
지금 재시작(Restart Now)을 클릭하여 언리얼 에디터를 재시작하고 프로젝트를 다시 엽니다.
최종 결과
프로젝트가 Blackmagic 카드의 비디오를 받아 렌더링된 출력을 카드로 전송할 준비가 되었습니다. 다음 섹션에서는 비디오를 연결하여 입출력 재생을 시작합니다.
2 - 언리얼 엔진에서의 비디오 입력 렌더링
여기서는 언리얼 에디터의 현재 레벨에서 Blackmagic 카드의 비디오 입력을 볼 수 있도록 할 것입니다. 이 프로세스에서는 미디어 번들(Media Bundle)이라는 에셋을 사용하는데, 미디어 번들은 미디어 프레임워크에 관여되는 여러 타입의 에셋을 패키지로 만들며 렌즈 디포메이션, 크로마 키잉, 색 보정 등과 같은 고급 기능을 제어할 수 있습니다.
단계
콘텐츠 브라우저(Content Browser)에서 소스(Sources) 패널을 펼칩니다. 우클릭하고 컨텍스트 메뉴에서 새 폴더(New Folder)를 선택합니다.
새 폴더의 이름을 Blackmagic으로 변경합니다.
새 폴더를 열고, 콘텐츠 브라우저에 우클릭한 뒤 미디어(Media) > 미디어 번들(Media Bundle)을 선택합니다.
새 에셋의 이름은 콘텐츠 브라우저에서 자동으로 선택되는데, 직접 서술형 이름을 지정할 수 있습니다. BlackmagicMediaBundle 같은 새 이름을 입력하고 Enter를 누릅니다. 미디어 프레임워크 에셋의 새 폴더가 미디어 번들 옆에 자동 생성되고, 이름에 _InnerAssets 접미사가 붙습니다. 이 에셋은 나중에 살펴 보겠습니다.
콘텐츠 브라우저에서 모두 저장(Save All) 버튼을 클릭하여 새 에셋을 저장합니다.
새 미디어 번들을 더블클릭하여 그 프로퍼티를 편집합니다. 미디어 번들은 엔진이 지원하는 모든 종류의 미디어 소스에서 비디오를 재생할 수 있으므로, Blackmagic 카드에서 비디오를 가져오겠다고 알려줘야 합니다. Media Source(미디어 소스) 프로퍼티의 드롭다운 목록에서 Blackmagic 미디어 소스(Blackmagic Media Source) 를 선택합니다.
미디어 번들이 처리하고자 하는 미디어 소스 타입을 식별했으면, 그 소스 타입이 제공하는 구성 프로퍼티를 구성해 주면 됩니다. 언리얼 엔진이 들어오는 비디오 신호의 포맷과 프레임 레이트를 자동으로 일치시키도록 만들 수 있습니다. 자동 포맷 감지를 사용하려면 환경설정(Configuration) 드롭다운을 클릭하고 자동(Auto)을 활성화한 다음 적용(Apply)을 클릭합니다. 이제 엔진이 원활하게 변경사항을 처리하며, 신호가 일시적으로 손실되면 자동으로 재시작합니다.
표시되는 옵션은 설치한 디바이스에 따라 다를 수 있습니다. Blackmagic 미디어 소스에서 설정할 수 있는 모든 프로퍼티에 관한 자세한 내용은 Blackmagic 미디어 레퍼런스 페이지를 참조하세요.
들어오는 비디오에 렌즈 디스토션을 고려한 보정을 적용하려면 렌즈 파라미터(Lens Parameters) 섹션에서 렌즈의 피지컬 프로퍼티를 설정하면 됩니다.
이러한 렌즈 파라미터는 렌즈의 피지컬 프로퍼티를 설정할 뿐입니다. 실제 렌즈 보정은 나중에 미디어 번들에서 사용하는 머티리얼 인스턴스를 편집할 때 활성화됩니다. 프로퍼티 구성을 마쳤으면 미디어 번들을 저장하고 닫습니다.
BlackmagicMediaBundle 에셋을 콘텐츠 브라우저(Content Browser)에서 레벨 뷰포트(Level Viewport)로 드래그합니다.
미디어 번들에 환경설정된 포트를 통해 현재 재생 중인 비디오를 보여주는 새 평면이 나타납니다. 뷰포트 툴바의 트랜스폼 툴을 사용하여 해당 비디오를 이동하거나, 회전하거나, 크기를 조정할 수 있습니다. 미디어 번들 재생이 자동 시작되지 않으면, 선택한 뒤 디테일(Details) 패널에서 미디어 번들(Media Bundle) > 미디어 재생 요청(Request Play Media) 버튼을 클릭합니다.
이제 비디오 스트림에 키잉 및 컴포지팅 이펙트를 적용하는 방법을 살펴보겠습니다. 미디어 번들 에디터(Media Bundle Editor)로 돌아온 뒤, 툴바의 머티리얼 에디터 열기(Open Material Editor) 버튼을 클릭하여 이 미디어 번들이 입력 비디오 피드를 레벨의 오브젝트에 그리는 데 사용하는 머티리얼 인스턴스를 편집합니다.
머티리얼 인스턴스 에디터(Material Instance Editor)에는 키잉, 크로핑 및 색 보정을 환경설정하고 미디어 번들에서 설정한 렌즈 디스토션 보정을 활성화할 수 있는 여러 프로퍼티가 노출됩니다.
머티리얼 인스턴스 에디터에서 세팅을 조정하면 메인 레벨 뷰포트에 재생 중인 비디오 피드에서 변경 효과를 확인할 수 있습니다.
머티리얼 인스턴스 프로퍼티 변경 작업이 끝나면, 툴바의 저장(Save) 버튼을 클릭합니다.
최종 결과
이 시점에서 SDI 포트에 재생 중인 비디오가 언리얼 엔진 레벨 안에 표시되고, 렌즈 왜곡 및 크로마 키와 같은 고급 기능을 어디서 구성하는지 이해했을 것입니다.
미디어 프레임워크에 이미 익숙한 경우, 레벨에 비디오를 가져오는 또 다른 방법이 있습니다. 프로젝트에 BlackmagicMediaSource 에셋을 새로 생성하고, 위 단계의 미디어 번들 안에 구성한 소스 프로퍼티와 똑같이 구성해 주면 됩니다. 그런 다음 자체 MediaPlayer 및 MediaTexture 에셋을 생성하여 레벨의 해당 소스 재생을 처리하면 됩니다. 자세한 내용은 미디어 프레임워크 문서를 참조하세요. 그러나 위와 같이 미디어 번들을 사용하는 것이 사용 편의성과 전문가급 비디오 기능의 균형을 최상으로 유지하는 데 좋습니다.
3 - 언리얼 에디터에서 출력 캡처
여기서는 Blackmagic 미디어 출력(Blackmagic Media Output) 오브젝트를 구성하고, 언리얼 에디터의 Media Captures(미디어 캡처) 패널을 사용하여 레벨에 선택된 카메라의 뷰를 Blackmagic 카드로 출력하겠습니다.
단계
콘텐츠 브라우저를 우클릭한 뒤 미디어(Media) > Blackmagic 미디어 출력(Blackmagic Media Output)을 선택합니다.
새 에셋의 이름을 BlackmagicMediaOutput으로 지정합니다.
새 에셋을 더블클릭하여 편집용으로 엽니다. Blackmagic 미디어 소스를 생성했을 때와 마찬가지로, 언리얼 엔진이 Blackmagic 카드로 전송하는 비디오 피드 프로퍼티를 제어하도록 환경설정(Configuration) 프로퍼티를 설정해야 합니다. 화살표를 클릭하여 서브메뉴를 열고, 비디오 구성과 일치하는 옵션을 선택한 다음 적용(Apply)을 클릭합니다.
표시되는 옵션은 설치한 디바이스에 따라 다를 수 있습니다. Blackmagic 미디어 출력에서 설정할 수 있는 모든 프로퍼티 관련 자세한 내용은 Blackmagic 미디어 레퍼런스 페이지를 참조하세요. 완료되면 미디어 출력을 저장하고 닫습니다.
이제 Blackmagic 카드에 전송할 출력에 대한 시점으로 사용할 카메라 두 대를 레벨에 배치합니다. 액터 배치(Place Actors) 패널에서 시네마틱(Cinematic) 탭을 열고, 시네 카메라 액터(Cine Camera Actor)의 인스턴스 두 개를 뷰포트에 드래그합니다.
레벨의 원하는 곳에 카메라를 배치하고, 레벨의 여러 곳을 비춥니다.
카메라 파일럿(Piloting) 기능을 사용하면 뷰포인트를 정확히 원하는 대로 쉽고 빠르게 설정할 수 있습니다. 뷰포트에서 파일럿 액터를 참조하세요.
메인 메뉴에서 창(Window) > 버추얼 프로덕션(Virtual Production) > 미디어 캡처(Media Capture)를 선택합니다. 미디어 캡처(Media Capture) 창에서 에디터가 Blackmagic 디바이스로 출력을 언제 전송할지, 레벨의 어느 카메라를 사용할지 제어할 수 있습니다.
미디어 뷰포트 캡처(Media Viewport Capture) 영역 아래 뷰포트 캡처(Viewport Captures) 컨트롤을 찾습니다. 추가(+)(Add (+)) 버튼을 클릭하여 새 캡처를 이 목록에 추가합니다.
새 항목을 펼칩니다. 먼저 캡처해 올 카메라를 추가합니다. 잠긴 카메라 액터(Locked Camera Actors) 컨트롤에서 추가(+)(Add (+)) 버튼을 눌러 새 항목을 추가합니다.
그런 다음, 드롭다운 목록을 사용해 레벨에 배치한 카메라 중 하나를 선택합니다.
같은 단계를 반복하여 목록에 다른 카메라를 추가합니다.
이제 이 카메라를 캡처하려는 출력을 구성합니다. 미디어 출력(Media Output) 컨트롤을 위에서 생성한 새 Blackmagic 미디어 출력 에셋(Blackmagic Media Output Asset)으로 설정합니다. 드롭다운 목록에서 선택해도 되고, 콘텐츠 브라우저에서 Blackmagic 미디어 출력 에셋을 이 슬롯에 드래그해도 됩니다.
창 상단의 캡처(Capture) 버튼을 클릭합니다.
창 하단에 Blackmagic 카드에 전송 중인 출력 프리뷰가 표시되는 새 프레임이 보입니다. 이 포트를 다른 다운스트림 장치에 연결한 경우, 출력이 표시되기 시작할 것입니다.
이 뷰포트 캡처를 위해 잠긴 카메라 액터 목록에 추가한 각 카메라는 비디오 프리뷰 위에 해당 버튼으로 표시됩니다. 버튼을 클릭하여 두 뷰 간에 캡처를 전환할 수 있습니다.
최종 결과
레벨의 카메라 출력을 Blackmagic 카드의 포트로 스트리밍하도록 언리얼 에디터를 구성했습니다. 다음은 실행 중인 언리얼 엔진 프로젝트에서 블루프린트 스크립팅을 사용하여 동일한 작업을 수행하는 방법을 살펴보겠습니다.
4 - 런타임에 출력 캡처
이전 섹션에서 사용한 미디어 캡처(Media Capture) 창을 활용하면 캡처한 내용을 실용적이고 손쉽게 Blackmagic 카드에 전송할 수 있습니다. 그러나 언리얼 에디터 안에서만 작동합니다. 프로젝트를 독립형 애플리케이션으로 실행할 때 동일한 작업을 수행하려면 미디어 출력에서 제공하는 블루프린트 API를 사용해야 합니다. 이 절차에서는 레벨 블루프린트에서 플레이어가 키보드의 키를 누르면 캡처를 시작하고 멈추는 간단한 토글 스위치를 구성해 보겠습니다.
에픽게임즈 런처의 샘플(Samples) 탭에 있는 버추얼 스튜디오 쇼케이스에는 UMG 인터페이스 위젯이 포함되어 있으며, 해당 위젯은 화면 유저 인터페이스에서 캡처를 제어하는 방법을 시연합니다.
단계
언리얼 에디터의 메인 툴바에서 블루프린트(Blueprints) > 레벨 블루프린트 열기(Open Level Blueprint)를 선택합니다.
이미 생성한 Blackmagic 미디어 출력 에셋에서 시작해서, 출력하려는 포트를 식별하겠습니다. 내 블루프린트(My Blueprint) 패널의 변수(Variables) 목록에서 추가(+)(Add (+)) 버튼을 클릭하여 새 변수를 추가합니다.
디테일(Details) 패널에서 변수 이름(Variable Name)을 BlackmagicMediaOutput으로 설정하고, 변수 타입(Variable Type) 드롭다운 목록을 사용하여 Blackmagic 미디어 출력 오브젝트 레퍼런스(Blackmagic Media Output Object Reference)로 만듭니다.
인스턴스 편집 가능(Instance Editable) 세팅(1)을 활성화하고 블루프린트를 컴파일합니다. 그런 다음 디폴트 값(Default Value) 섹션에서 변수가 콘텐츠 브라우저(2)에서 만든 Blackmagic 미디어 출력 에셋을 가리키도록 설정합니다.
Ctrl을 누르고 내 블루프린트 패널의 변수 목록에서 BlackmagicMediaOutput을 드래그하여 이벤트 그래프(Event Graph)에 놓습니다.
BlackmagicMediaOutput 변수 노드의 출력 포트를 클릭하여 드래그하고 미디어(Media) > 출력(Output) > 미디어 캡처 생성(Create Media Capture)을 선택합니다.
아래와 같이 노드를 Event BeginPlay 노드에 연결합니다.
그러면 Blackmagic 미디어 출력에서 새 미디어 캡처 오브젝트를 생성합니다. 미디어 캡처는 캡처 제어에 사용할 활성 씬 뷰포트 캡처(Capture Active Scene Viewport) 및 캡처 중지(Stop Capture)라는 두 가지 주요 블루프린트 함수를 제공합니다.
먼저 새 미디어 캡처 오브젝트를 자체 변수에 저장하여 다른 곳에서 다시 액세스할 수 있도록 합니다. Create Media Capture 노드의 출력 포트를 드래그하여 놓고 변수로 승격(Promote to Variable)을 선택합니다.
내 블루프린트 패널의 변수 목록에서 새 변수 이름을 MediaCapture로 변경합니다.
여기서 미디어 캡처를 변수에 저장하는 것이 중요합니다. 저장하지 않으면 언리얼 엔진의 가비지 컬렉터가 작업을 완료하기도 전에 자동 소멸시킬 수 있습니다.
Ctrl을 누르고 MediaCapture 변수를 드래그하여 이벤트 그래프에 놓습니다.
MediaCapture 변수 노드의 출력 포트를 클릭하고 드래그하여 미디어(Media) > 출력(Output) >활성 씬 뷰포트 캡처(Capture Active Scene Viewport)를 선택합니다. 이 작업을 다시 하면서 미디어(Media) > 출력(Output) > 캡처 중지(Stop Capture)를 선택합니다.
이벤트 그래프를 우클릭하여 입력(Input) > 키보드 이벤트(Keyboard Events) > P를 선택합니다. P 노드의 눌림(Pressed) 출력을 클릭하고 드래그하여 흐름 제어(Flow Control) > 플립플롭(FlipFlop)을 선택합니다.
아래처럼 FlipFlop 노드의 A 출력을 Capture Active Scene Viewport 노드의 입력 이벤트에 연결하고, FlipFlop 노드의 B 출력을 Stop Capture 노드의 입력 이벤트에 연결합니다.
블루프린트를 컴파일 및 저장하고, 프로젝트를 플레이해 봅니다. 메인 툴바에 있는 재생(Play) 버튼 옆에 있는 화살표를 클릭하고 새 에디터 창(PIE)(New Editor Window (PIE)) 또는 독립형 게임(Standalone Game) 옵션 중 하나를 선택합니다.
에디터에서의 비디오 캡처는 새 에디터 창(PIE) 또는 독립형 게임에서 프로젝트를 플레이할 때만 작동합니다. 선택된 뷰포트(Selected Viewport) 디폴트 모드 또는 시뮬레이트(Simulate) 모드에서는 작동하지 않습니다. 또한 프로젝트의 뷰포트 해상도, 즉 각 프레임에서 언리얼 엔진이 생성하는 렌더링된 이미지의 크기는 활성 미디어 프로파일에 설정된 출력 해상도와 일치해야 출력 비디오 피드에 적합한 크기가 됩니다.
프로젝트 시작 이후 키보드의 P 버튼을 누르면 엔진에서 Blackmagic 카드로 출력 전송을 토글할 수 있을 것입니다.
최종 결과
이 시점에서 Blackmagic 미디어 소스, 미디어 번들, 미디어 캡처 시스템은 어떻게 사용하는지, 그 모든 요소가 어떻게 작동하여 전문 비디오를 언리얼 엔진에 입출력할 수 있는지 이해할 수 있을 것입니다.
직접 해보기
이제 새 프로젝트에서 Blackmagic 카드로 비디오 입력과 출력을 교환하는 기본 방법을 살펴보았으니, 이제 혼자서도 계속 학습할 수 있습니다.
미디어 번들로 만든 머티리얼 인스턴스에서 엔진 내 키 설정 솔루션을 살펴보세요. 카드의 입력 포트에 그린 스크린 비디오를 전달해 보고, 머티리얼 인스턴스의 키 설정 컨트롤을 사용해서 배경을 제거해 봅니다.
버추얼 스튜디오 쇼케이스에서 카메라를 전환하고 런타임 때 비디오 캡처를 제어하는 온스크린 UI와 같이 기본 구성에 추가되는 기능을 살펴보세요.