2016년 2월 23일

언리얼 엔진 4와 함께한 렉서스 호버보드 ‘Ride The Slide’ 체험

저자: 제작: Rama Allen Eric Renaud-Houde Raymond Leung

2015년 렉서스(Lexus)는 영화 '백투더퓨처'에서 공중 부양하는 스케이트보드인 호버보드(hoverboard)를 최초로 제작하는데 도전했고, 전문 스케이트보더인 로스 맥고란(Ross McGouran)이 전용 공원에서 렉서스 호버보드를 타는 이 특별한 영상Lexus Hoverboard을 공개함으로써 일류의 하늘을 나는 꿈을 실현했습니다. 다음 도전은 Mill과 언리얼 엔진 4 기술에 힘입어 대중에게 라이딩 체험을 그대로 전달하는 것이었습니다.

최초의 VR 리뷰 제작 툴인 Mill Stitch , 또는 Vive를 이용한 방 정도 크기의 VR 실시간 프로토타입 제작이든  저희는 진화하는 기술을 실험하고 새로운 방법을 끊임없이 모색하고 있습니다. 

2015 LA Auto 쇼를 위해서 렉서스 슬라이드 (Lexus Slide)의 라이딩 경험을 그대로 재현해 달라는 렉서스의 요청에 Spinifex Group U.S.와의 협업으로 제작된 압력 감지 컨트롤러와 리얼타임 랜더링 엔진으로 작업한 Ride the Slide’로 그 해답을 제시했습니다.

체험

스케이트 파크 시뮬레이션은 특별 제작된 서라운드 비디오 케이브로 체험자들은 시각적으로 청각적으로 다이나믹한 렉서스 슬라이드 파크(Lexus Slide Park)에서 호버보드 트랙을 경험하게 됩니다. 시뮬레이션 속 세트는 올 초 바르셀로나에 지어진 실제 특별 모형인 렉서스 슬라이드 파크입니다.

압력 감지 장비 위에 사용자가 올라서면 체중 분배 모니터링과 함께 체험이 시작됩니다. 사용자는 장비 위에서 몸을 기울여 속도와 방향을 조정할 수 있습니다.

하이퍼 리얼 스케이트 파크와 배경은 에픽게임즈의 언리얼 엔진 4로 제작되었고, 세트 내면 18개의 HD 스크린에서 초당 60프레임이 나오도록 커스터마이징을 하였습니다. Apollo Studios가 이벤트 기반 스파셜 오디오를 엔진에 추가하였습니다.

분산 랜더링

언리얼 랜더링을 18개의 디스플레이에 분산시켜 랜더링 하기 위해 저희는 짧은 시간 동안 다수의 기술적 문제에 직면하였습니다. 여기에는 가상 카메라 구성, 네트워킹, 프레임 동기화를 위한 상태 분배 등의 문제점이 있었고, 이 문제들을 대하면서 저희의 실력이 한층 향상되었습니다.

하드웨어

분산 랜더링을 하는 데 있어 제일 먼저 확인해야 되는 사항은 일괄 전송을 피할 수 있는가 입니다. 이번과 같은 경우에는 (9720 x 3840) 의 해상도를 처리해야 하는데, SLI 등의 지원이 미약하기 때문에 명확히 한 대의 컴퓨터로 전부 처리할 수는 없습니다. 그래서 저희는 한 대의 서버와 여섯 대의 클라이언트를 같은 네트워크에 놓기로 결정했습니다.

가상 카메라

각 머신은 각 벽의 상단 또는 하단 절반의 면적을 랜더링 합니다. (NVIDIA surround가 활성화 된 3 개의 v-sync portrait 모드 디스플레이) 각 씬은 매끄럽게 디스플레이 사이에서 이어집니다. 가상 카메라들은 할당된 스크린에 맞게 플레이어의 폰에 붙여집니다. 저희는 여기에 비대칭 절단면 랜더링 (렌즈 쉬프트)기능을 언리얼 엔진 4의 카메라 컴포넌트 클래스에 추가하였습니다. 각 클라이언트 인스턴스는 json 설정을 읽어서 정해진 위치의 카메라에서 랜더링 합니다.

게다가, 고정 60프레임은 최소 사양이라, 이 아래로 프레임이 떨어질 때 특히나 카메라가 움직이는 모션에서 이용자가 불편함을 느끼게 됩니다. NVIDIA GTX 980ti 카드, 80퍼센트 까지로 해상도 낮추기 및 품질 조정 트윅 등을 이용해서 고정 60프레임을 얻어낼 수 있었습니다. 그 외 컴퓨터 간의 랜더 차이가 나기 때문에 스크린 스페이스 포스트 프로세스를 줄여야 했습니다.

네트워킹

저희는 공유된 시스템 자원을 가능한 적게 만들기로 하였습니다. 그래서 UDP 전송 방식을 선택하고 네트워크 스위치를 “sync”로 맞춰 놓았습니다. 사용자가 3D 공간 속을 돌아다니게 되면 저희는 간단히 그 위치와 방향 및 시간 정보를 전송시켜서 마티네 전환 효과가 이어지도록 합니다.

TCP 프레임 락을 회피하기 위해 언리얼 엔진 4의 GPU/CPU 동기화 포인트를 손대는 것은 프로젝트의 범위를 벗어나는 것이라고 판단하였습니다. 수많은 UDP 레이턴시와 락킹 테스트를 거쳐 이런 판단을 내렸습니다. 저희는 1마이크로세컨드 이하의 핑 속도를 얻어 냈고 몇 시간 돌린 다음에도 0 UDP 패킷 손실을 달성하였습니다. 결과에 매우 만족한 저희는 이 방법을 가지고 계속 진행하기로 하였습니다.

임플멘테이션 측면에서 저희는 Asio C++ 라이브러리와 새로운 Cinder OSC wrapper를 언리얼 엔진에 바로 연결하였습니다. 그리고 FRunnable 오브젝트를 asio::io_service 에 연결하고 몇가지 설정을 수정하여 프로그램이 서버 또는 랜더 클라이언트로 동작할 것인지를 알도록 하였습니다. Asio가 나머지 커뮤니케이션 레이어를 다룬다는 것을 설치의 막바지에 알 수 있었습니다. 사용자 데이터, 이동 속도와 방향 데이터를 보내주는 Wii Balance Board를 폴링하는 Cinder 응용 프로그램같은 것을 예를 들어 볼 수 있겠습니다. 이 프로그램은 언리얼 엔진으로부터 데이터를 전송 받아서 증강현실을 구성하는 DMX fan을 컨트롤하기도 합니다.

애셋 제작

애셋 제작은 저희가 평소에 제작하던 VFX 제작 방식과 조금 달랐습니다. 언리얼 엔진에서 잘 작동하도록 Light baking, Lightmass등 특별히 신경 쓸 부분이 있었습니다. 각 애셋은 디퓨즈, 노멀, 스패큘라 맵 등으로 UV래핑이 되어 있었고 라이트맵의 품질을 높이고 최적화 하기 위해서 여분의 UV가 필요했습니다.

실시간 소셜 쉐어링

사람들이 Lexus ‘Ride the Slide’를 체험하는 모습을 허락을 받고 캡쳐하여 15초간의 영상을 소셜 미디어에 올릴 수 있도록 하는 과정에는 다수의 카메라로 구성된 시스템이 사용되었습니다.

언리얼 엔진 프로그램은 TouchDesigner 프로그램과 연결되어 커스텀 비디오 캡쳐 시스템으로 iOS 기기와 연결되어 체험 시작을 하거나 실시간 색 보정과 편집을 할 수 있습니다.

결과

Mill 팀은 언리얼 엔진 4 랜더링을 18개의 디스플레이로 송출하기 위한 방법을 풀고 실감나는 체험에 필요한 퀄러티의 매끄러운 경험을 제작할 수 있었습니다. 12일간의 쇼 기간 동안 4천명 이상의 관람객들이 이 체험 존을 즐겼습니다.

저희는 프레임 동기화를 위해 언리얼 엔진 프레임 동기화 지점, 머신 클럭 동기화, libpcap을 이용한 정확한 패킷 타임스탬프 읽어내기 등을 포함한 더 진보된 방법들을 계속 찾아낼 것입니다. 참,언리얼 테크니컬 아티스트를 구하고 있습니다!

Lexus Ride the Slide 비하인드 씬과 Mill에 관한 더 자세한 정보는 공식 웹사이트에서 확인할 수 있습니다.