반다이 남코 연구소의 마리구치 아키히코가 '인간의 스펙에 따른 프레임 속도 해결 모범 사례'라는 제목의 강연을 했습니다. 게임 레이턴시는 게이머가 조작한 내용이 반영돼 화면에 출력되기까지 걸리는 시간인데, 이걸 어떻게 분석하고 고찰했는지 읽어볼만 하기에 요약해서 소개합니다.
시각이나 청각은 소뇌 운동 중추의 일부에서 처리합니다. 따라서 소뇌를 프로세서라고 간주하고, 기본 스펙을 비교할 필요가 있는데요. 사람의 뇌는 동기화된 클럭으로 작동하는 싱글 스레드 구조로, 클럭은 25~33.3Hz입니다. GHz, MHz, KHz가 아니라 그냥 Hz입니다. 이 속도는 사람마다 다르고, 딱 하나로 고정되지도 않았으며, 훈련을 통해 빨라지지도 않습니다.
사람의 지각은 시각, 청각, 촉각, 기억 등이 합쳐져서 처리됩니다. 사람이 언제 어떻게 조작할지 타이밍을 인식하는 순간은 1초당 25번에서 33번밖에 안 됩니다. 1클럭에 모든 작업을 함께 수행하니 대단하다고도 할 수 있으나, 한 번에 너무 많은 작업은 동시에 처리하지 못하빈다.
뇌는 일정한 클럭으로 움직입니다. 따라서 자극도 어느 정도 안정성을 갖는 게 바람직합니다. 자극이 불안정하게 이루어진다면 그 변화까지 포함해서 학습을 하다보니 게이머가 받게 되는 부하가 늘어납니다. 또 평소 게임 환경과 타이밍이 다른 환경에서 게임을 하게 된다면 지금까지 학습한 내용이 맞지 않기에 실수를 많이 하게 됩니다. 따라서 안정성을 최대한 중시해서 게임을 설계해야 한다는 게 이 주장의 내용입니다.
영상을 인식하는데 20ms가 걸리지만 소리는 더 빠릅니다. 2ms면 처리합니다. 소리 쪽의 반응 속도가 더 빠릅니다. 화면을 보고 반응하는 것보다 게임 소리를 듣고 반응하는게 유리한 이유도 여기에 있습니다.
시각의 경우 시야의 중심부는 반응 속도가 느리지만, 주변 부분은 빠릅니다. 이 말인즉, 화면 중앙에선 느끼지 못하던 깜짝임을 화면 주변부에서 보게 된다는 의미입니다. 광시야각 디스플레이나 VR HMD는 주변 수야에 높은 리프레시율이 필요합니다. 대체로 90Hz 이상이 바람직하다고 봅니다.
이런 입력 처리 외에도 데이터 처리에 30~40ms, 근육을 움직이는 반응이 나오기까지는 200ms가 걸린다고 합니다. 운동 반은은 훈련하면 빨라집니다. 육상 경기의 경우 시작 신호에서 0.1초 안에 움직이면 반칙으로 처리하나, 최근에는 반사 속도가 0.1초 이하인 경우도 있어 규칙을 바꿔야 한다는 이야기가 나오고 있습니다.
게임을 안정적인 환경에서 플레이할수록 좋겠지만 이를 지키기 어려울 수도 있을 겁니다. 0.1초 정도는 자극에 지연이 생겨도 뇌에서 처리할 수 있습니다. 게임에서 조정이 필요하다면 이 0.1초 안에서 처리해야 합니다.
이처럼 인간의 두뇌가 처리하는 스펙에는 한계가 있습니다. 이 한계를 넘어서면 처리해도 제대로 인식되지 않습니다. 하지만 몇 가지 예외가 있습니다.
가장 먼저 맥락 효과라는 게 있습니다. 전후 관계를 판단해 지연이 발생하는지를 파악하는 것입니다. 터치스크린 위에 펜으로 선을 그려나갈 때, 펜촉의 위치와 선 사이에 존재하는 틈을 레이턴시로 느끼는 일이 대표적입니다. UI의 추종성에서 생겨나는 레이턴시가 사람에게 매우 민감하게 반응한다는 이야기입니다. 클라우드 게임에서 컨트롤러를 선택할 때도 이 부분이 몹시 중요합니다.
다음은 리듬의 동기화입니다. 프로 악기 연주자들은 사람의 한계를 뛰어넘은 정확도로 연주를 하는데, 이건 리듬 동기화의 효과로 주기적인 리듬이 학습되면서, 한계를 넘어선 정밀도를 실현한 것입니다. 이런 효과는 분명히 존재하지만, 이걸 염두에 두고 리듬 게임을 만들어선 안됩니다. 리듬을 학습하지 않은 사람의 최대 값인 40ms를 기준으로 타이밍을 정해야 합니다.
이렇게 까다로운 사람의 스펙에 맞추려면 어느 정도의 레이턴시가 필요할까요? 40ms 이상이면 화면 업데이트를 인식하지 못할 수도 있습니다. 30~40ms가 인간의 반응 속도에 맞는 값이지만, 사람마다 개인차가 있어 그 사이 어디인지 파악하기란 쉽지 않습니다. 30ms 이하로 줄이면 개인차가 드러나지 않으나, 사람의 처리 주기에서 영향을 받습니다. 20ms는 사람의 시야 중앙 반응 속도 때문에 깜박임을 느낄 수 있습니다. 그래서 16.6ms(60fps)라는 숫자가 상당히 합리적이라고 봅니다.
그럼 프레임이 60fps면 될까요? 프레임 속도가 낮거나, 표시 프레임과 컨텐츠 프레임 속도가 다를 때의 부작용에 대해서는 이미 말한 바 있습니다. 프레임 속도가 높으면 움직임이 부드러워집니다. 또 영상의 흔들림을 막고 다양한 프레임 속도를 지닌 컨텐츠 표시에 맞추기 위워집니다.
프레임 속도가 낮으면 영상의 흔들림이나 버벅거림을 느끼게 됩니다. 실제로 영상이 흔들리진 않습니다. 뇌는 영상이 부드럽게 움직인다고 여기지만, 실제 영샹이 그 기대를 따라가지 못하면서 뇌가 예측한 영상의 움직임과 실제 영상의 위치가 다르기에 그 차이가 흔들림이나 버벅거림으로 느껴집니다.
이를 해결하려면 프레임 속도를 높이거나, 중간에 검은 화면을 넣는 방법이 있습니다. 화면을 표시한 후 검은색으로 채워 화면을 완전히 지우고, 그 다음 그림을 표시합니다. 다음번에 보일거라 기대한 화면이 나오지 않기에 뇌가 오해할 일도 없습니다. 물론 검은 화면을 넣으면 화면이 어두워지고, 프레임 속도에 따라서는 플리커가 발생합니다.
프레임 속도를 올릴수록 부자연스러움은 줄어듭니다. 대체로 120fps 정도를 이야기하고 있습니다. 하지만 영화나 애니메이션의 240fps를 30fps나 60fps로 올리면 불규칙한 움직임을 느끼게 됩니다. 그래서 24fps에 정수를 곱한 값으로 표시하는 방법이 있습니다. 120hz는 24hz의 5배, 144Hz는 6배, 240Hz는 10배입니다. 요새 게이밍 모니터의 리프레시율이 왜 저런 숫자로 나오는지 이제 아시겠지요.
다양한 컨텐츠를 표시하기 위해 240Hz와 60Hz의 배수인 120Hz로 표시하는 방법은 매우 현실적입니다. HDMI 2.0은 풀 HD의 120Hz 디스플레이까지 지원하기에, 앞으로 HDMI 2.0 지원 TV가 보급되면 120Hz 게임도 늘어나리라 생각됩니다. 이런 환경에서 240fps의 오프닝 애니메이션은 크게 거슬리지 않습니다.
영상의 프레임이 낮다면 프레임 속도를 높여 품질을 개선해야 합니다. 배속 처리 프레임 보간, 초해상 처리, 업 컨버팅 등의 여러 이름으로 불리는 방법입니다. 가장 간단한 건 아무런 처리 없이 프레임 속도만 올리는 겁니다. 이것만으로는 의미가 없습니다. 다음은 프레임과 프레임 사이를 잇는 부분을 영상 합성으로 채워넣는 것인데, 움직임이 빠른 영상에는 적합히자 않습니다.
마지막은 움직임을 보간해 새로운 프레임을 만들어내는 작업입니다. 옵티컬 플로우라고 합니다. 애니메이션은 이 처리가 힘듭니다. 실사 동영상은 정보가 많아 보간이 쉽고, 프레임도 24fps를 보장하지만, 애니메이션 영상은 실질적인 정보량이 8fps밖에 안 되는 경우도 많습니다. 여기에선 영상의 움직임 벡터를 검출해 보간 처리를 실시, 30fps의 영상을 60fps로 업 컨버팅한 사례를 소개했습니다. 최근에는 GPU와 머신 러닝을 사용해 중간 프레임을 자동 생성하는 방안도 나오고 있습니다.
한편으로, 지싱크와 프리싱크 같은 가변 프레임 레이트 기술이 등장하고 있습니다. 이는 게임 개발사에는 유리하나 플레이어에게 최고의 선택은 아니라고 설명합니다. 안정된 프레임을 제공하는 게 무엇보다 바람직하다고 합니다. 가변 프레임 레이트를 사용하면 화면 정보량은 최적화되지만, 앞서 말한대로 뇌의 작동 주기에 영향을 줄 수 있기 때문입니다.