3D 멀미 완화
조준 보조 기능을 시연하다 옆에서 보던 사람들이 3D 멀미를 호소했습니다. 멀미를 숫자로 측정하고 코드로 줄여 나간 과정과 조준 보조가 게임을 해치지 않는 타협점을 정리해봤습니다.
회의실에 큰 모니터를 바라보던 사람들 여럿이 거의 동시에 "어, 이거 좀 어지러운데요"라고 말했습니다. 조준 보조 기능을 탑재한 프로토타입을 시연하던 중이었습니다. 화면 속 카메라는 적을 향해 부드럽게 돌아가고 캐릭터는 좌클릭 한 번에 알아서 적에게 다가가고 락온이 걸린 대상을 카메라가 계속 따라가고 있었습니다. 정작 마우스를 쥔 저는 문제가 없었습니다. 어지러움을 호소한 쪽은 옆에서 화면을 보던 사람들이었습니다. 같은 화면을 보고도 누구는 멀미를 일으키고 누구는 괜찮다면 차이는 화면이 아니라 조작에 있을 가능성이 높습니다. 조작하는 저는 카메라가 곧 어디로 돌지 미리 알고 있었고 옆 사람의 눈은 영문도 모른 채 화면이 휙 돌아가는 결과만 받아내고 있었습니다. 화면을 흔든 것은 제 조작이 아니라 카메라를 스스로 움직이는 자동 기능이었습니다.
3D 멀미의 정체는 비교적 단순합니다. 눈이 보는 운동과 몸이 느끼는 운동이 어긋날 때 뇌가 그 불일치를 일종의 이상 신호로 받아들이는 것입니다. 의자에 가만히 앉아 있어도 화면 속 카메라만 격하게 돌면 눈은 "움직인다"고 보고하고 전정기관은 "안 움직인다"고 보고합니다. 이 어긋남이 멀미의 핵심입니다. 그런데 같은 화면이라도 직접 조작하는 사람은 멀미를 덜 일으킵니다. 곧 카메라를 돌릴 것을 자기가 알기 때문에 그 의도 신호가 미리 몸에 전달되어 충격을 완충합니다. 반대로 옆에서 보기만 하는 사람은 의도 신호 없이 결과만 받으므로 같은 빌드에서도 더 강하게 멀미합니다. 이 능동과 수동의 차이는 이 회의 자리에서 처음 발견한 것이 아니라 멀미 연구가 오래전부터 정의해 둔 제어 가능성 효과입니다. 스스로 운동을 제어하고 예측하는 관찰자가 그렇지 못한 관찰자보다 멀미를 덜 일으킨다는 것입니다[^Latency and Cybersickness: Impact, Causes, and Measures. A Review]. 시연은 본질적으로 관람입니다. 그러니 시연용 빌드는 관람자를 기준으로 만들어야 하고 그 말은 곧 자동으로 움직이는 카메라를 최대한 줄여야 한다는 뜻이었습니다.
이 분야의 연구 자체가 제가 겪은 것과 똑같은 장면에서 출발했습니다. 멀미는 인류만큼 오래된 증상입니다. 영어 단어 "nausea"부터가 그리스어로 배를 뜻하는 "naus"에서 왔고 기록상 최초의 서술은 히포크라테스가 남긴 "바다 항해는 운동이 몸을 어지럽힌다는 것을 증명한다"는 문장입니다. 고대 그리스와 로마는 이미 숙련된 뱃사람이 멀미에 강하다는 것 즉 반복 노출로 적응이 생긴다는 것까지 알고 있었습니다[^A Historical View of Motion Sickness—A Plague at Sea and on Land, Also with Military Impact]. 멀미가 흩어진 관찰을 넘어 본격적인 연구 대상이 된 계기는 20세기의 군대였습니다. 2차 대전에서 병력을 대규모로 배와 비행기로 실어 나르자 배멀미와 비행기 멀미가 곧장 훈련 손실과 전투력 저하로 이어졌고 미 해군 펜사콜라 항공의학연구소를 중심으로 멀미의 원인과 측정과 개인차를 체계적으로 파고드는 흐름이 만들어졌습니다. 화면만으로도 멀미가 난다는 인식은 그보다 조금 뒤 두 사건에서 또렷해집니다. 하나는 1952년 시네라마입니다. 146도에 이르는 거대한 곡면 스크린이 주변시까지 가득 채운 채 롤러코스터 장면을 투사하자 몸은 객석에 가만히 붙어 있어도 관객 일부가 멀미를 호소했습니다. 운동 플랫폼도 없이 오직 시각만으로 멀미가 난 시각 유발 멀미의 초기 대중 관찰입니다[^Cinerama sickness and postural instability]. 다른 사례 하나가 더 결정적입니다. 1950년대에 한 항공사가 미 해군용 헬리콥터 시뮬레이터를 만들자 그 시연을 지켜본 조종사들이 어지럼을 호소했습니다. 하브론과 버틀러가 1957년 보고서에서 이 현상을 처음 "시뮬레이터 멀미"라고 이름 붙였습니다. 당시 조사에서 응답자 36명 중 28명이 멀미를 겪었고 경험 많은 교관 쪽이 학생보다 더 심하게 멀미했습니다. 숙련자일수록 시뮬레이터와 실제 비행의 미세한 어긋남을 더 예민하게 감지했기 때문이라는 해석이 나왔습니다[^Simulator sickness]. 그러니까 3D 멀미 연구가 시작된 계기 자체가 "시뮬레이터 데모를 보던 관람자들이 멀미를 호소한 사건"이었습니다. 제가 마주친 장면과 70년의 격차를 두고 구조가 정확히 같습니다. 이 분야는 처음부터 "보는 사람이 멀미한다"에서 출발했고 제 사건도 거기서 출발했습니다.
왜 멀미가 생기는가를 두고는 몇 갈래의 이론이 경쟁해 왔습니다. 가장 표준적인 설명은 1975년 리즌과 브랜드가 정리한 감각 충돌설입니다. 시각과 전정과 고유수용감각이 서로 어긋나거나 지금 들어오는 감각이 과거 경험으로 만들어진 기대와 어긋날 때 멀미가 생긴다는 것입니다. 리즌은 1978년 이를 "신경 불일치"라는 말로 다듬어 멀미의 핵심은 어느 한 감각의 이상이 아니라 감각들 사이의, 그리고 예측과 실제 사이의 불일치라고 못 박았습니다. 1990년 오만은 이 이론을 제어이론의 언어로 수식화했습니다. 뇌가 내부 모델로 예측한 감각과 실제 들어온 감각의 차이를 "충돌 벡터"로 누적하고 빠른 경로와 느린 경로 두 갈래로 증상의 과민성과 시간에 따른 변화를 설명하는 모델입니다. 오만의 결론은 멀미가 결국 예측 오차의 누적이고 그래서 같은 자극도 내부 모델이 적응하면 잦아든다는 것입니다[^Motion sickness: a synthesis and evaluation of the sensory conflict theory]. 한편 1977년 트라이스먼은 전혀 다른 관점에서 접근했습니다. 불쾌하고 사람을 무력하게 만드는 구토가 왜 진화적으로 사라지지 않고 남았는가 하는 질문입니다. 그의 답은 이렇습니다. 감각 좌표계가 반복적이고 예측 불가능하게 교란되는 상태가 자연에서는 신경독을 먹었을 때의 신호와 닮았고 구토는 본래 그 독을 게워 내려는 방어 기제라는 것입니다. 멀미는 그 방어 기제가 엉뚱한 자극에 발동된 부산물이라는 해석입니다[^Motion Sickness: An Evolutionary Hypothesis]. 이 진화 가설은 그 뒤로도 매끈하게 정착하지는 못했습니다. 2012년 오만은 트라이스먼류의 적응 가설이 그럴듯한 이야기로 치부할 것은 아니되 뒷받침하는 증거가 뚜렷하지 않고 상반된 증거도 있다는 점을 지적하면서 멀미를 하나의 적응으로 설명하기보다 평소 따로 작동하던 뇌간의 여러 계통이 뜻하지 않게 얽혀 생긴 부적응적 부산물로 보는 편이 낫다고 정리했습니다[^Are evolutionary hypotheses for motion sickness "just-so" stories?]. 어느 쪽으로 읽든 이 계열은 멀미가 왜 존재하는가에는 답하지만 무엇이 멀미를 키우는가에는 답하지 못해 무엇을 줄여야 하는지를 따지는 실무에서는 충돌설 쪽이 더 쓸모가 있었습니다.
충돌설에 정면으로 맞선 것이 1991년 리치오와 스토프레겐의 자세 불안정설입니다. 이들은 멀미가 감각의 충돌 그 자체가 아니라 몸의 자세를 안정적으로 제어하는 전략을 아직 갖추지 못한 상황에서 온다고 봤습니다. 낯선 운동 환경에 놓이면 사람은 한동안 균형을 제대로 잡지 못하고 흔들립니다. 그 자세 불안정이 곧 멀미로 이어진다는 주장입니다. 이 이론의 강점은 검증 가능한 예측을 내놓는다는 데 있습니다. 스토프레겐과 스마트는 멀미가 시작되기 전부터 자세의 흔들림이 먼저 커진다는 것 즉 자세 동요가 증상에 선행한다는 것을 실제 측정으로 확인했습니다. 흔들리는 방을 이용한 실험에서 나중에 멀미를 느끼게 될 사람들은 구역질을 보고하기 한참 전부터 이미 몸의 흔들림 패턴이 달랐고 그 자세 운동만으로 누가 멀미할지를 통계적으로 가려낼 수 있었습니다[^Visually Induced Motion Sickness Predicted by Postural Instability]. 두 이론은 경쟁하지만 실무에서는 사이좋게 같이 쓰입니다. 충돌설은 "자극을 줄여라"로, 불안정설은 "안정 단서를 줘라"로 번역되기 때문입니다. 후자의 대표적 처방이 안식 좌표계입니다. 1999년 프로세로 연구진은 가상 장면 위에 지구에 고정된 격자처럼 움직이지 않는 시각 배경을 겹쳐 주면 시뮬레이터 멀미가 유의하게 줄어든다는 것을 확인했습니다. 흔들리는 화면 속에 변하지 않는 바닥 하나를 끼워 넣어 시각계가 기준을 잡게 해 주는 것입니다[^The use of an independent visual background to reduce simulator side-effects].
이론만큼이나 끈질기게 발전한 것이 멀미를 숫자로 옮기려는 시도입니다. 한 갈래는 사람의 증상을 설문으로 측정하는 것이었습니다. 가장 널리 쓰이는 도구는 1993년 케네디 연구진이 만든 시뮬레이터 멀미 설문 SSQ입니다. 이들은 펜사콜라에서 쌓인 기존 멀미 설문을 3,691건의 시뮬레이터 비행 자료에 요인분석으로 돌려 시뮬레이터 멀미와 무관한 항목을 걷어 내고 16개 증상만 추렸습니다. 그리고 이 증상들을 메스꺼움, 안구운동계, 방향감각상실이라는 세 묶음으로 나눠 각각에 가중치를 곱해 점수를 내도록 설계했습니다. 이들의 결론은 단순한 설문 하나가 아니라 하나의 발견이었습니다. 시뮬레이터 멀미는 실제 멀미와 증상의 결이 다르다는 것 구체적으로는 메스꺼움보다 눈의 피로와 초점 곤란 같은 안구운동계 증상의 비중이 크다는 것입니다[^Simulator Sickness Questionnaire: An Enhanced Method for Quantifying Simulator Sickness]. SSQ는 세션 전후를 비교하는 도구라 진행 중의 변화를 측정하기에는 무리가 있습니다. 그 빈자리를 2005년 보스 연구진의 MISC가 메웠습니다. 0점 무증상에서 10점 구토까지 한 줄로 늘어놓고 30초마다 입으로 답하게 한 척도라 가볍고 침습이 적어 멀미가 어느 순간 어떤 동작에서 올라가는지를 실시간 시계열로 그릴 수 있습니다[^Motion sickness symptoms in a ship motion simulator: effects of inside, outside, and no view]. 2011년 케샤바즈와 헤히트의 FMS는 같은 실시간 계열이되 0에서 20까지로 좀 더 잘게 나눠 민감도를 높였고[^Validating an Efficient Method to Quantify Motion Sickness], 2018년 김 연구진의 VRSQ는 HMD 환경에 맞춰 SSQ를 9문항·두 요인으로 간소화해 VR 멀미를 더 적은 부담으로 재도록 했습니다[^Virtual reality sickness questionnaire (VRSQ): Motion sickness measurement index in a virtual reality environment]. 설문은 결국 사람의 자기 보고라 회상과 표현의 편향을 안고 가지만 이 척도들이 있었기에 "얼마나 어지러운가"가 비로소 비교 가능한 숫자가 되었습니다.
다른 한 갈래는 사람의 반응 대신 자극 자체를 재서 멀미를 예측하려는 시도였습니다. 출발점은 1976년 매콜리 연구진의 멀미 발생률 모델입니다. 이들은 사람을 수직으로 진동시키면서 어느 주파수와 가속도에서 얼마나 토하는지를 측정해 진동의 주파수와 가속도와 노출 시간을 넣으면 구토 발생률이 나오는 수식을 세웠습니다. 가장 멀미를 잘 일으키는 주파수가 약 0.167헤르츠 즉 6초에 한 번꼴의 느린 흔들림이라는 결론은 이후 멀미 연구의 기준점이 되었습니다[^Motion Sickness Incidence: Exploratory Studies of Habituation, Pitch and Roll, and the Refinement of a Mathematical Model]. 이 발상은 국제표준 ISO 2631로 이어져 가속도를 멀미에 민감한 주파수대로 가중한 뒤 노출 시간으로 누적하는 "멀미 선량"이라는 개념으로 정착했습니다. 자극을 약처럼 용량으로 다루되 0.2헤르츠 부근을 가장 위험한 대역으로 본다는 점이 핵심입니다[^Motion Sickness]. 1998년 보스와 블레스는 감각 충돌설을 그대로 계산 모델로 옮겨 감각이 느낀 수직과 뇌가 기대한 수직의 차이를 누적해 멀미를 예측하는 식을 제안했습니다[^Modelling motion sickness and subjective vertical mismatch detailed for vertical motions]. 다만 이런 모델들은 전정 자극 즉 실제 몸의 흔들림을 전제로 해서 화면 멀미에 잘 맞지는 않습니다. 화면 멀미에 가장 가까운 시도는 2001년 So 연구진의 "공간 속도" 지표입니다. 이들은 가상 장면의 복잡도와 장면이 움직이는 속도를 곱한 하나의 값을 정의하고 복잡도든 속도든 이 값을 키우면 사이버 멀미 평정이 따라 오른다는 강한 상관을 확인했습니다. 화면 상의 운동량을 직접 재면 멀미를 예측할 수 있다는 자극 기반 시각 멀미 지표의 직접적인 선례입니다[^A Metric to Quantify Virtual Scene Movement for the Study of Cybersickness]. 제가 한 일은 새로운 발명이 아니라 이 두 갈래의 계보를 통째로 빌려 와 제 시연 빌드에 적용한 것에 가까웠고 뒤에서 만들게 될 멀미 지수도 결국 이 줄기 위에 선 또 하나의 시도였습니다.
제가 구현한 조준 보조 기능은 한마디로 카메라를 대신 움직여 주는 장치였습니다. 락온이 걸린 적을 카메라가 알아서 따라가고 좌클릭하면 캐릭터가 알아서 다가가고 새 적을 락온하면 카메라가 그 방향으로 회전합니다. 문제는 그런 자동 동작이 너무 많았다는 것입니다. 어시스트를 켠 순간 한 화면 안에서 카메라의 방향을 결정하는 자동 제어 경로 다섯 가지가 동시에 작동하고 있었습니다. 락온 지속 추적, 자동 접근 중의 회전, 자동 락온 진입 시의 회전, 정렬 대기 중의 강제 회전, 락온 모드의 자동 복귀가 한꺼번에 카메라를 움직이고 있었던 것입니다. 평균적으로 한 프레임에 사용자가 아닌 자동 경로가 두세 개씩 카메라를 제어하고 있었습니다. 더 고약한 것은 멀미를 줄여 보겠다고 더한 보정들이 오히려 멀미의 원인이 되어 있었다는 점입니다. 적의 위치를 시간 평균으로 부드럽게 만드는 필터를 더했더니 적이 좌우로 피할 때 카메라가 0.2초쯤 늦게 따라가면서 화면 전체가 미끄러지는 감각을 만들어 냈습니다. 화면을 영화처럼 잡아 보겠다고 시선을 캐릭터와 적 사이로 살짝 옮기는 보정도 회전보다 훨씬 강한 미끄러짐을 만들었습니다. 좋게 하려고 더한 것이 오히려 멀미를 악화시키는 역설로 작용했습니다.
감으로 "좀 어지럽다"를 주고받으면 무엇이 얼마나 나아졌는지 영영 알 수 없습니다. 그래서 멀미를 숫자로 다루기로 했습니다. 빌드가 만들어내는 시각 자극을 계측하려고 시도했습니다. 카메라가 도는 각속도, 화면 끝에서 픽셀이 흐르는 양인 광학 흐름, 전체 회전 가운데 사용자가 만들지 않은 자동 회전의 비율 같은 값을 게임 루프 안에서 측정해 화면 구석에 띄우고 동시에 파일로 내보냈습니다. 여기에 더해 다섯 개 성분을 가중합해 0부터 100까지의 한 숫자로 멀미 수준을 압축하는 지표를 만들었습니다. 이것을 멀미유발지수 즉 MSI라고 불렀습니다. 광학 흐름, 자동 회전 비율, 미끄러짐, 동시에 작동하는 자동 경로 수, 카메라 설정을 각각 점수로 매겨 합산하는 방식입니다.

지표를 만들고 나니 두 가지를 살펴봐야 했습니다. 먼저 이 발상은 제 독창이 아닙니다. 앞서 본 매콜리의 발생률 모델과 ISO의 멀미 선량, 그리고 화면의 복잡도와 속도를 곱한 So의 공간 속도 지표가 모두 자극으로 멀미를 예측하는 같은 흐름에 있습니다. 제 MSI는 그중에서도 화면 멀미를 겨냥한 So 쪽 계보에 선량의 발상을 더해 다섯 성분으로 확장한 것에 가깝고 매콜리의 고전 모델도 약자가 똑같이 MSI라 이름까지 겹칩니다. 다음으로 이 지표가 실제 멀미를 제대로 표현하는지는 아직 약하게만 검증됐습니다. 다섯 성분 하나하나가 문헌에서 멀미 유발 요인으로 확립된 양을 측정하고 있다는 점에서 구성은 탄탄합니다. 기본 시연 모드의 MSI가 85로 "매우 강함" 구간 깊숙이 찍혔고 관람자들이 바로 그 모드에서 멀미를 호소했으니 방향도 맞았습니다. 하지만 이건 일화에 가깝습니다. 같은 영역의 학술 연구에서도 광학 흐름과 순간 보고 멀미의 상관이 어떤 경우엔 약하게만 나타났습니다[^A Feasibility and Impact Investigation of Continuous Subjective Cybersickness Feedback Reporting]. 그러니 이 지표는 검증된 예측기가 아니라 문헌 근거가 단단한 가설적 대리 지표입니다. 절대값을 신주단지처럼 모실 게 아니라 빌드 A와 B를 같은 조건에서 비교하는 자로 쓰는 편이 맞습니다.
이 점은 곧 실측에서 드러났습니다. 실제로 빌드를 돌려 데이터를 받아 보니 코드 상수만으로 추정한 MSI가 13이라고 말하던 빌드의 실측 중앙값이 23 가까이 나왔습니다. 10점 가까운 괴리를 확인해보니 미끄러짐 성분이 코드 상태와 무관하게 락온만 걸리면 점수를 부여하고 있었습니다. 이미 그 미끄러짐을 만들던 보정들을 다 꺼 둔 뒤였습니다. 산식을 코드 상태에 맞춰 고치자 그 성분이 0으로 떨어졌습니다. 다음 측정에서 지표가 크게 내려간 것의 상당 부분은 빌드가 더 편안해진 것이 아니라 산식이 코드 상태와 맞아떨어진 것입니다. 지표가 현실과 분리되면 잘못된 값을 낸다는 것을 숫자로 확인했습니다.
지표가 생기자 완화는 추측이 아니라 측정과 반복이 됐습니다. 코드를 한 번 고치고, 데이터를 받아 분석하고, 다음 변경사항을 결정하기를 반복했습니다. 가장 큰 변화는 무언가를 더한 것이 아니라 뺀 것입니다. 미끄러짐을 만들던 두 보정을 끄고, 필터의 지연을 사실상 없애고, 화면 가장자리를 회전이 빠를 때만 어둡게 가리는 장치를 더한 한 묶음이 MSI를 85에서 50 부근으로 끌어내렸습니다. 그다음으로 큰 묶음은 자동으로 새 적을 락온하거나 대상을 바꿀 때 카메라가 휙 도는 동작을 아예 제거한 것입니다. 락온 표시만 옮기고 카메라는 사용자가 마우스로 따라오게 두었습니다. 정리하면 무엇을 더했는가보다 자동으로 움직이는 카메라 동작 가운데 무엇을 껐는가가 멀미를 더 크게 줄였습니다. 끝내 가장 강한 "매우 강함" 구간에 머무는 시간을 0으로 만들었습니다.
이 과정에서 한 가지 제약이 줄곧 문제였습니다. 한번은 시야각을 60도에서 80도로 넓혀 광학 흐름을 30퍼센트쯤 줄였습니다. 하지만 화면이 너무 넓고 카메라가 너무 멀어 어색하다는 피드백에 다시 60도로 되돌렸습니다. 그 한 번의 되돌림이 MSI를 12점쯤 도로 끌어올렸습니다. 시각적 정체성을 지키는 대가였습니다.
시야각을 넓히지 못한 부분을 메운 것이 앞서 한 묶음으로 더했던 화면 가장자리 가리개였습니다. 회전이 빠를 때만 시야 테두리를 어둡게 좁히는 이 장치가 왜 듣는지를 이해하려면 화면 멀미를 실제로 매개하는 고리를 살펴봐야 합니다. 벡션(vection)은 몸이 가만히 있어도 시야 전체가 한 방향으로 흐르면 뇌가 "내가 움직인다"고 착각하는 현상입니다. 바로 이 착각이 전정기관의 "안 움직인다"는 신호와 어긋나 멀미를 만듭니다. 그리고 이 벡션은 예측되지 않을 때 특히 멀미를 키웁니다. 곧 다가올 자기운동을 미리 아는 사람보다 영문도 모른 채 시야가 흐르는 것을 받아내는 사람이 더 심하게 어지러워진다는 것이 실험으로 확인됐습니다[^Unexpected Vection Exacerbates Cybersickness During HMD-Based Virtual Reality]. 이는 글 첫머리에서 본 관람자와 조작자의 비대칭을 벡션의 언어로 다시 말한 것이기도 합니다. 조작자는 자기가 곧 카메라를 돌릴 것을 알아 벡션을 예측하지만 관람자는 예측 없이 시야 흐름을 그대로 받습니다. 한편 벡션을 가장 세게 일으키는 것은 시야 한가운데가 아니라 주변시 곧 눈 가장자리로 흐르는 광학 흐름입니다. 시야각이 넓을수록 카메라가 대상에 가까울수록 멀미가 심해지는 것도 결국 이 주변시 흐름이 커지기 때문입니다. 가장자리 가리개는 정확히 그 주변시 흐름을 겨냥합니다. 벡션을 일으키는 것은 바깥쪽 픽셀 흐름이니 그 부분만 눈에서 덜어 내면 화면 한가운데의 정보는 그대로 둔 채 멀미만 낮출 수 있습니다. 시각적 주의를 화면 가장자리보다 한가운데로 모으게 하면 3D 멀미가 감소한다는 것도 실험으로 확인됐습니다. 이는 시야를 물리적으로 좁히는 것과 같은 방향으로 작동합니다[^Restricting the distribution of visual attention reduces cybersickness].
이 장치는 제가 처음 고안한 것이 아니라 VR에서 이미 검증된 기법입니다. 2016년 페르난데스와 파이너는 이동하는 동안 시야각을 은근하게, 그리고 상황에 따라 좁혔다 넓혔다 하면 사이버 멀미가 유의하게 감소한다는 것을 실험으로 확인했습니다. 핵심은 "은근하게"와 "동적으로"였습니다. 좁히는 정도를 눈에 띄지 않을 만큼 줄이고 멀미를 부르는 빠른 운동이 있을 때만 좁혔다가 잠잠해지면 도로 넓혔더니 참가자 다수가 시야가 좁아진 것조차 알아채지 못한 채 더 오래 버텼고 몰입감도 크게 해치지 않았습니다[^Combating VR sickness through subtle dynamic field-of-view modification]. 유비소프트의 'Eagle Flight'는 이 발상을 상용 게임으로 옮긴 대표 사례입니다. 저공으로 빠르게 날 때 주변 사물이 눈가로 휙휙 흐르면서 멀미를 일으키던 문제를 빠른 움직임이 주변시에 잡힐 때만 시야 가장자리를 좁히는 동적 시야 축소로 잡아 멀미를 사실상 비이슈로 만들었습니다[^Tunnel Vision: How Ubisoft Created 'Eagle Flight', A VR Flying Game With No Nausea]. 구글 어스 VR의 컴포트 모드도 이동 중 시야를 원형으로 좁히고 바깥을 회색으로 죽이는 같은 계열입니다. 구글이 정리해 둔 권장 원칙 자체가 제가 빌드를 만지면서 내린 결론과 비슷했습니다. 회전할 때 더 좁혀라, 등속을 유지해 가속을 피하라, 고정된 고대비 배경을 깔아라, 회전 자체를 줄여라. 이 네 가지입니다[^Tunneling demo]. 제 빌드의 가장자리 가리개는 이 계보의 축소판입니다.
멀미를 줄이는 일은 단순한 튜닝이 아니라 게임의 조작감 자체를 바꾸는 일이었습니다. 카메라가 더 이상 적을 자동으로 따라가지 않게 되자 조준의 적극성은 내려가고 그만큼 플레이어가 직접 따라가야 할 몫이 늘었습니다. 좌클릭 한 번에 0에서 최고 속도로 즉시 튀어 나가던 자동 접근은 먼저 회전을 끝낸 뒤 부드러운 가속 곡선을 타도록 나뉘었습니다. 게임의 호흡이 약간 느려지되 부드러워졌습니다. 락온은 카메라를 돌려 적이 시야에서 사라져도 풀리지 않고 수동으로만 해제되는 쪽으로 바뀌어 조준의 신뢰성은 올라가되 자유 조준 중 의도치 않게 락온이 유지되는 트레이드오프가 생겼습니다. 그리고 가장 큰 변화가 있었습니다. 조작계가 단일안으로 확정되는 단계에서 그동안 쌓아 올린 멀미 완화 장치의 상당수를 통째로 걷어냈습니다. 지표 패널도 가장자리를 가리는 장치도 지속 추적과 각종 필터와 클램프도 강도 토글도 함께 사라졌습니다. 카메라는 마우스로 자유롭게 돌리되 자동 접근 때만 상한을 건 채 정렬하는 거의 군더더기 없는 형태로 단순해졌습니다. 멀미를 더 정교하게 보정한 것이 아니라 멀미를 만들던 자동 동작을 설계에서 아예 빼 버린 것입니다. 완화 기법을 빼는 것이 곧 완화가 되는 가장 극단적인 형태였습니다. 다만 부작용이 없는 두 가지는 살아남았습니다. 마우스 입력의 미세한 떨림을 다듬는 필터와 상하 입력의 데드존입니다. 자동으로 개입하던 동작을 거의 다 걷어냈지만 입력의 가벼운 떨림 보정만은 남겨 두었습니다.
같은 단계에서 캐릭터 발밑에 작은 그림자를 깔았습니다. 별것 아닌 듯하지만 근거가 있는 선택입니다. 그림자는 시지각에서 강력한 단안 깊이 단서로 물체가 바닥에 붙어 있는지 떠 있는지, 공간 어디에 놓였는지를 알려 줍니다. 1997년 커스틴 연구진의 고전적인 "상자 속 공" 실험이 그 힘을 극적으로 보여 줍니다. 상자 안에 공 하나를 띄워 놓고 공의 크기와 화면상 위치는 그대로 둔 채 바닥에 지는 그림자의 궤적만 바꿨더니 똑같은 공이 어떤 때는 바닥을 따라 상자 안쪽으로 멀어지는 것처럼, 어떤 때는 제자리에서 관찰자 쪽으로 떠오르는 것처럼 전혀 다르게 보였습니다. 그림자 하나가 공의 3차원 궤적을 결정했고 그 영향력이 크기 변화 같은 다른 깊이 단서를 압도할 정도였습니다[^Moving cast shadows induce apparent motion in depth]. 물체를 바닥에 이렇게 "붙여" 주는 접지감은 물체가 허공에 떠 보이는 문제를 없애려고 AR·VR이 흔히 쓰는 처방이기도 합니다.

멀미의 맥락에서 이 그림자가 맡는 역할은 조금 다릅니다. 발밑 그림자와 무대 모서리에 세운 고정된 기둥은 흔들리는 화면 속에서 변하지 않는 바닥을 만들어 시각계가 기준으로 삼을 지점을 줍니다. 이것은 앞서 본 자세 불안정설과 안식 좌표계 가설이 함께 가리키는 처방입니다. 프로세로 연구진의 독립 시각 배경과 원리가 같습니다. 화면 전체가 요동쳐도 눈이 "이건 안 움직인다"고 기준으로 삼을 수 있는 고정 참조를 하나 두면 시각과 전정의 충돌이 그만큼 완화됩니다. 같은 원리를 가장 재치 있게 쓴 사례가 퍼듀 대학의 "가상 코" 실험입니다. 화면 한가운데에 반투명한 코 모양을 늘 같은 자리에 띄워 두자 토스카나 별장을 걷는 시뮬레이션에서 멀미 없이 버틴 시간이 평균 94초 늘었습니다. 참가자 대부분은 화면에 코가 그려져 있다는 사실조차 의식하지 못했습니다. 코가 시야에 고정된 기준점으로 조용히 작동한 것입니다[^'Virtual nose' may reduce simulator sickness in video games]. 제 발밑 그림자와 기둥도 정확히 같은 일을 합니다.
다만 제 빌드에서 이 그림자의 효과만 따로 떼어 측정하지는 못했습니다. 여러 변경에 묶여 함께 들어갔기 때문입니다. 그림자는 멀미를 직접 줄이는 장치라기보다 공간을 단단하게 만들어 자동 카메라가 화면을 흔들어도 덜 흔들리게 받쳐 주는 바닥에 가깝습니다.
한편 이 작업 자체가 예전 같으면 성립하기 어려운 일이었습니다. 3D 멀미 완화는 오랫동안 거의 사람의 경험과 직관이 관장하는 영역이었습니다. 이론적 배경을 갖추고 프로덕션 한복판에서 멀미 하나만 골라 집중적으로 파고드는 일은 사실상 불가능에 가까웠습니다. 기댈 것은 암묵적인 경험뿐이었고 그 위에서 할 수 있는 것은 느리고 더딘 수정뿐이었습니다. 효율이 좋을 리 없었습니다. 그러다 보면 멀미는 늘 다른 마일스톤 목표에 밀려나 결국 아무도 더는 신경 쓰지 않는 영역으로 남고 그 상태 그대로 고객에게까지 전달되기 십상이었습니다.
지금은 다릅니다. 히포크라테스의 배멀미부터 펜사콜라의 군사 연구, 감각 충돌설과 자세 불안정설, SSQ와 MISC, 매콜리와 So의 자극 지표, 페르난데스와 파이너의 비네트까지 수십 년에 걸쳐 쌓인 학술적 토대 위에 올라서서 그 결과를 곧바로 제 시연 빌드에 적용해 문제를 집중적으로, 그리고 효율적으로 풀 수 있었습니다. 이 변화의 밑바탕에 무엇이 있는지는 예전에 '기계와 함께'와 '자동완성'에서 적었습니다. 흩어진 문헌을 몇 달이 아니라 몇 분 만에 모으고 낯선 분야의 계보를 빠르게 지도처럼 정리하고 그것을 다시 코드로 옮겨 시험합니다. 예전 같으면 한 사람의 프로덕션 일정 안에 도저히 들어가지 않았을 이 일이 기계와 함께라면 다음날 오전까지 준비할 수 있습니다. 이 글이 다룬 측정과 완화의 반복이 애초에 가능했던 것도 그 덕입니다.
결국 모든 결정은 같은 트레이드오프 위에 있었습니다. 멀미를 줄이려 자동 보조를 거둘수록 조작의 편의는 줄고, 편의를 위해 자동 보조를 보탤수록 멀미는 늘어납니다. 이건 제 상황만의 고민이 아니라 상용 게임이 20년째 씨름해 온 문제입니다. 'Mirror's Edge'는 1인칭으로 도시를 내달리는 게임입니다. 시야각을 50도 안팎으로 좁게 잡은 데다 화면이 발걸음마다 위아래로 출렁이는 헤드 보브에 카메라 기울기까지 겹쳐 멀미로 악명이 높았습니다[^Why low FOV in first-person games can make you feel nauseous]. 콘솔 슈터들이 좁은 시야각에 갇히는 것도 비슷하지만 이유는 조금 다릅니다. 시야각을 넓히면 화면에 그릴 것이 늘어 프레임이 떨어지고 프레임 저하는 그 자체로 멀미를 부르기 때문에 좁은 시야각은 상당 부분 프레임 예산과 멀미 사이의 타협입니다. 제가 시야각을 60도에서 더 넓히지 못한 것과 같은 벽이 카메라 설정만으로는 멀미를 다 잡을 수 없다는 앞의 결론과 정확히 같은 지점에서 반복됩니다.
반대편에는 선택지를 여는 길이 있습니다. 'Half-Life: Alyx'는 멀미 완화 옵션을 거의 교과서처럼 갖춘 게임입니다. 이동 방식이 여러 단계로 열려 있습니다. 한쪽 끝에는 한 지점을 찍으면 화면을 잠깐 깜빡이면서 순간이동하는 방식이 있습니다. 이동 구간의 카메라 운동 자체를 없애 가장 편안하고 멀미 취약자에게 권장됩니다. 다른 쪽 끝에는 부드러운 연속 이동이 있고, 회전도 일정 각도씩 끊어 도는 스냅 턴과 연속 회전을 나중에 패치를 통해 추가해 나란히 골라 쓰게 했습니다[^Half-Life: Alyx Accessibility Options - Full Guide]. 멀미 민감도는 사람마다 편차가 워낙 커서 하나의 정답을 강요하기보다 토글과 슬라이더로 선택지를 주는 쪽이 업계의 합의에 가깝습니다. 이 개인차는 취향의 문제가 아니라 오래전부터 측정되어 온 실체입니다. 멀미 연구는 성인기의 멀미 민감도가 화면 멀미를 가장 잘 예측하는 인자이고 나이와 성별에 따라, 그리고 반복 노출로 생기는 적응에 따라 크게 갈린다는 것을 정리해 왔으며, 이를 평생의 멀미 이력으로 추정하는 설문까지 갖추고 있습니다[^Motion sickness susceptibility]. 같은 빌드가 누구에게는 무해하고 누구에게는 견디기 힘든 이유가 여기 있고 그래서 완화의 마지막 조각은 빌드 하나를 모두에게 맞추는 일이 아니라 임계치가 저마다 다른 사람들이 각자 자기 자리를 고르게 두는 일이 됩니다. 게임에 카메라 옵션이 왜 존재하는지는 예전에 '왜 게임에 카메라 옵션이 있나요?'에서 다뤘습니다. 그 답의 한 갈래가 바로 여기 사람마다 다른 멀미의 임계치를 옵션으로 흡수하는 데 있습니다.
그래서 제가 도달한 타협점은 멀미를 0으로 만드는 완벽한 보정이 아니었습니다. 그런 방향은 대개 게임을 너무 많이 깎아 냅니다. 자동 추적을 전부 없애면 멀미는 사라지지만 조준 보조 기능 자체가 무의미해지고 보정을 강화하면 친절해 보이지만 보는 사람이 멀미합니다. 제가 남긴 것은 길을 안내하되 화면을 빼앗지 않는 가벼운 조준 보조였습니다. 카메라의 주도권은 플레이어에게 돌려주고 보조 기능은 자동 접근처럼 사용자가 명시적으로 요청한 순간에만 그것도 속도에 상한을 건 채 최소한으로만 개입하게 둔 것입니다. 돌이켜 보면 멀미 완화의 종착점은 더 좋은 보정이 아니라 멀미를 만들던 자동 동작을 설계에서 덜어 내고 부작용 없는 최소한만 남기는 일이었습니다. 시뮬레이터는 자동으로 움직이는 카메라를 줄여야 한다는 결론을 숫자로 입증한 뒤 그 결론이 조작계 설계 자체에 흡수되어 조용히 제 역할을 다했습니다. 멀미를 완전히 없애는 방법은 아마 없을 것입니다. 다만 조준을 돕되 카메라의 주도권을 빼앗지 않는 쪽이 게임을 덜 해치면서 사람을 덜 어지럽히는 데에는 더 잘 맞는 경우가 많은 것 같습니다.