오래된 프로젝트 폴더를 정리하다가 재미난 걸 발견했습니다. 2016년에 지디아이 코리아의 모션 시뮬레이터 G-Roller Coaster 운영 프로그램을 개발하면서 찍어 둔 영상과 화면들입니다. 노란 로봇암 끝에 좌석 두 개를 달고 사람을 태운 채 게임 화면에 맞춰 기울이고 돌리는 장비입니다.

개발 범위는 PC에서 장비를 다루는 운영 프로그램입니다. 게임을 고르고 시작하면 게임 속 움직임이 그대로 좌석의 움직임으로 이어지도록 했고 운영자가 직접 장비를 움직여 보고 멈출 수 있는 기능도 함께 넣었습니다.

2인승 로봇암 모션 시뮬레이터가 사람을 태우고 움직이는 애니메이션

2016년 11월에 촬영한 영상으로, 약 3배속으로 재생됩니다.

게임 하나로 시작부터 정지까지

메인 화면에는 지금 선택한 콘텐츠와 Game Start 버튼이 크게 보입니다. 버튼을 누르면 게임이 실행되고 장비도 함께 운행을 시작합니다. 게임을 끄면 장비도 같이 멈추기 때문에 운영자가 둘을 따로 챙길 필요가 없습니다.

War Thunder를 선택한 G-Roller Coaster 운영 프로그램 메인 화면

메인 화면의 감도(Sensitivity) 슬라이더로 움직임의 크기를 조절합니다. 같은 게임이라도 탑승객이나 운영 상황에 맞춰 더 부드럽게 또는 더 크게 움직이게 할 수 있습니다.

게임 콘텐츠를 골라 끼우는 구조

시뮬레이터는 어떤 게임을 띄우느냐에 따라 체험이 달라집니다. 그래서 게임 콘텐츠 관리자(Game Contents Manager)에서 콘텐츠를 추가하고, 고치고, 지우고, 이번에 운행할 콘텐츠를 고를 수 있게 했습니다.

NoLimits 2와 War Thunder가 등록된 게임 콘텐츠 관리 화면

콘텐츠마다 실행 경로와 실행 옵션, 연동 모듈을 따로 등록합니다. 프로그램을 켤 때 지정한 콘텐츠를 바로 띄우는 자동 시작(Auto Start)도 설정할 수 있습니다.

연동 모듈은 게임별로 나눠 만들었습니다. 롤러코스터 시뮬레이션 NoLimits 2, 비행 게임 War Thunder, 레이싱 게임 Dirt 3, 모션 시뮬레이터용 프로그램 SimTools 등과 연동했고 새 게임이 필요하면 모듈만 더하면 됩니다.

War Thunder 비행기 조종석 시점 게임 화면

게임 속 움직임을 좌석으로 옮기는 방식

게임마다 움직임 정보를 내보내는 방식이 다릅니다. 연동 모듈이 각 게임에서 기체나 차량의 기울기, 방향, 높이 같은 값을 받아 오고 운영 프로그램은 이 값을 장비가 이해하는 네 가지 움직임으로 바꿔 짧은 주기로 계속 보냅니다.

게임 값을 그대로 옮기면 문제가 생깁니다. 비행기가 오래 선회하면 좌석이 한쪽 끝에 붙어 버리고 방향이 180도를 넘는 순간 값이 반대쪽으로 튀면서 좌석이 덜컥 움직입니다. 그래서 축마다 움직임을 다듬는 필터를 두었습니다.

필터의 원리는 단순합니다. 값 자체보다 값이 변하는 순간을 크게 반영하고 움직임이 이어지는 동안에는 좌석을 조금씩 가운데로 되돌립니다. 탑승객은 기울기 시작하는 순간을 또렷하게 느끼고 좌석은 다음 움직임을 위한 여유를 되찾습니다. 모션 시뮬레이터에서 워시아웃(Washout)이라고 부르는 기법입니다.

게임마다 연출도 따로 맞췄습니다.

게임연출
War Thunder기관총을 쏘면 좌석에 잔떨림을 더해 사격 반동을 표현
NoLimits 2코스터가 옆으로 뒤집히며 돌면 좌석도 같은 방향으로 이어서 회전
두 게임 공통게임 시작 직후 몇 초 동안은 일부 움직임을 잡아 두어 출발이 덜컥거리지 않게 함

축별 반응 정도는 게임마다 설정값으로 저장해 두고 장비와 콘텐츠에 맞춰 조정할 수 있게 했습니다.

운영자가 직접 움직여 보는 모션 컨트롤

게임 없이도 장비를 움직여 볼 수 있도록 모션 컨트롤(Motion Control) 화면을 만들었습니다. 좌우 기울기 롤(Roll), 앞뒤 기울기 피치(Pitch), 좌우 회전 요(Yaw), 상하 이동 히브(Heave) 네 가지 움직임을 슬라이더로 하나씩 움직여 볼 수 있습니다.

Roll·Pitch·Yaw·Heave 슬라이더와 장치 상태가 보이는 모션 컨트롤 화면

조이스틱 조작도 지원합니다. 조이스틱의 축과 버튼을 각 움직임에 연결해 두면 손으로 장비를 조종할 수 있습니다. 화면 아래 장치 상태(Device State)에는 네 가지 움직임의 현재 값이 비행기 그림과 함께 표시됩니다.

오른쪽 제어 버튼으로 시작(Start), 정지(Stop), 원점 복귀(Origin), 비상정지(Emergency), 서보 켜기와 끄기(Servo On/Off)를 할 수 있습니다. 서보(Servo)는 로봇암 관절을 움직이는 모터를 말합니다.

운행 중에도 바로 쓰는 안전 단축키

게임이 화면을 가득 채우고 있을 때는 운영 프로그램 창을 찾을 틈이 없습니다. 그래서 게임 실행 중에도 키보드 단축키로 장비를 다룰 수 있게 했습니다.

단축키기능
Ctrl + F8원점 복귀
Ctrl + F9정지
Ctrl + F10비상정지
Ctrl + F11안전바 잠금
Ctrl + F12안전바 해제

운행 시간 기록

서보를 켠 시간과 실제로 운행한 시간을 자동으로 기록합니다. 기록은 관리자 비밀번호로 여는 차트 화면에서 시간 흐름에 따라 볼 수 있어 장비를 얼마나 돌렸는지 확인하고 점검 주기를 잡는 데 쓸 수 있습니다.

마무리

정리하면 이래요.

  • 게임을 고르고 Game Start 한 번으로 게임과 장비가 함께 움직입니다.
  • 게임별 연동 모듈을 등록해 콘텐츠를 바꿔 가며 운행합니다.
  • 축별 필터가 게임 움직임을 다듬어 좌석이 끝에 붙지 않으면서도 실감 나게 움직입니다.
  • 모션 컨트롤 화면과 조이스틱으로 네 가지 움직임을 직접 조작합니다.
  • 운행 중에도 단축키로 비상정지와 안전바를 다룹니다.
  • 서보 가동 시간과 운행 시간이 자동으로 쌓입니다.