안녕하세요.
저는 언리얼엔진을 이제막 시작한 사람입니다.
인터넷에서 정보를 찾다가 뽀까뽀까님의 글을 보고 이렇게 질문을 남깁니다.
http://www.youtube.com/watch?v=b1SCT7EPaX4
링크의 동영상을 보시면 플레이어에 4대의 카메라를 설치후 각각의
다른 창 혹은 각기 다른 모니터에 출력을 하고 있습니다.
이렇게 내보낼수 있는 방법이 언리얼엔진쪽에서는 없는것 같아 이렇게 도움을 청하고자 합니다.
이렇게 구현할 수 있는 방법이 있을까요?
-------------------------------------------------------------
Answer>
link로 알려 주신 영상 잘 봤습니다.^^
간단히 요약하면, 모니터 4개를 앞, 뒤, 좌, 우 설치후,
각각의 서로 다른 시점으로 rendering하는 거네요.
참고로 아래는 제가 예전에 'multi view' 구현과 관련해서
설명한 link입니다.
http://cafe.naver.com/igc123/276
http://cafe.daum.net/igc123/K3VE/210
님이 이제 막 시작하신 분이라면,
위 link의 방법을 최대한 응용하셔서 해결하시는게 '쉬운 길'이라고 생각하고요.^^
하지만,
'고난의 길'을 가서라도 제대로 해결하고 싶으시다면..^^;;;;;
아래 절차대로 해 보시기 바랍니다.
1>
이걸 MS Windows 환경에서 구현한다면,
MS Windows의 경우 다중 monitor를 지원하니까,
VGA card를 같은 종류로 4개 설치하시고,
monitor도 4개 설치하셔서, 1대의 PC로 4대의 monitor를 자유롭게
다룰 수 있도록 환경을 구축합니다.
그리고,
원활한 설명을 위해 4개의 monitor의 해상도는 모두 800 * 600으로 가정하겠고요.^^;;;;;
첫번째 monitor는 가로 영역이 0 ~ 799,
두번째 monitor는 가로 영역이 800 ~ 1599,
세번째 monitor는 가로 영역이 1600 ~ 2399,
네번째 monitor는 가로 영역이 2400 ~ 3199 라고 가정하고,
모든 monitor의 세로 영역은 모두 0 ~ 599 라고 가정하겠습니다.
2>
이후, unreal engine 4에서 돌아가는 program을 짜시는데,
우선 아래와 같이 4개의 window를 만들어서 추가합니다.
TSharedRef
.Screenp-osition( FVector2D( 0, 0 ) )
.ClientSize( FVector2D( 800, 600 ) )
.Title( LOCTEXT("monitor_1st", "montor 1st") )
TSharedRef
.Screenp-osition( FVector2D( 800, 0 ) )
.ClientSize( FVector2D( 800, 600 ) )
.Title( LOCTEXT("monitor_2nd", "montor 2nd") )
TSharedRef
.Screenp-osition( FVector2D( 1600, 0 ) )
.ClientSize( FVector2D( 800, 600 ) )
.Title( LOCTEXT("monitor_3rd", "montor 3rd") );
TSharedRef
.Screenp-osition( FVector2D( 2400, 0 ) )
.ClientSize( FVector2D( 800, 600 ) )
.Title( LOCTEXT("monitor_4th", "montor 4th") );
FSlateApplication::Get().AddWindow( windowMonitor1st );
FSlateApplication::Get().AddWindow( windowMonitor2nd );
FSlateApplication::Get().AddWindow( windowMonitor3rd );
FSlateApplication::Get().AddWindow( windowMonitor4th );
생성할 때, 좌표를 넣었기 때문에
4개의 window는 생성후 바로 서로 다른 monitor에 배치됩니다.
3>
아래와 같이 overlay와 viewport를 만드셔서,
위에서 만든 window와 연결합니다.
TSharedRef
TSharedRef
.EnableGammaCorrection( true )
[
overlay1st
];
windowMonitor1st->SetContent( vp1st.ToSharedRef() );
TSharedRef
TSharedRef
.EnableGammaCorrection( true )
[
overlay2nd
];
windowMonitor2nd->SetContent( vp2nd.ToSharedRef() );
TSharedRef
TSharedRef
.EnableGammaCorrection( true )
[
overlay3rd
];
windowMonitor3rd->SetContent( vp3rd.ToSharedRef() );
TSharedRef
TSharedRef
.EnableGammaCorrection( true )
[
overlay4th
];
windowMonitor4th->SetContent( vp4th.ToSharedRef() );
4>
아래와 같이 game viewport client를 만드셔서,
위에서 만든 window와 overlay를 연결합니다.
UGameViewportClient gvc1st = ConstructObject
gvc1st->SetViewportOverlayWidget( windowMonitor1st, overlay1st );
UGameViewportClient gvc2nd = ConstructObject
gvc2nd->SetViewportOverlayWidget( windowMonitor2nd, overlay2nd );
UGameViewportClient gvc3rd = ConstructObject
gvc3rd->SetViewportOverlayWidget( windowMonitor3rd, overlay3rd );
UGameViewportClient gvc4th = ConstructObject
gvc4th->SetViewportOverlayWidget( windowMonitor4th, overlay4th );
5>
위의 과정까지 완료되면,
4개의 game viewport client로 4개의 monitor에 접근해서
처리할 수 있는 기반이 완료된 것이고요.
이제 camera 4개를 배치하셔서, 4개의 game viewport client
(위의 설명의 예에서 gvc1st, gvc2nd, gvc3rd, gvc4th)에
연결해서 rendering하시면 됩니다~ ^^
전에 link로 알려 드린 방법이나
위 방법 중에 하나를 선택하셔서 해결하시기 바랍니다.^^
Tag:
안기훈, Kee Hoon Ahn, 언리얼, Unreal, UDK, iPhone, iPad, app, 앱, iOS