음악 게임에서의 지연시간(latency) 문제 해결
2010.03.24 02:36
레이턴시
레이턴시는 물리적인 반응 시간을 나타냅니다. 보통 밀리세컨드(ms)단위로 표시합니다. 92ms의 레이턴시가 있다고 한다면 반응이 올 때까지 0.092초만큼 지연된다는 의미입니다.
레이턴시 문제
이제와서 레이턴시 문제를 꺼내든 이유는, 예전에는 생각보다 레이턴시가 큰 문제가 되지 않았기 때문입니다.
레이턴시 문제는 아날로그보다 디지털 환경에서 더 심각합니다. 많은 장비가 디지털화 되었지만 실제로 인간이 보고 듣는 방법은 여전히 아날로그를 사용해야 합니다. 디지털과 아날로그의 전환에는 그 전환 동작에 걸리는 시간만큼 지연시간이 생기게 됩니다. 표현해야 할 대상이 복잡해질수록 이 전환 동작은 오래 걸리게 되고 이것은 대개 소프트웨어적으로 처리되는 경우 더 심하게 생깁니다.
최근에 와서는 아케이드 게임조차도 전용 기판을 버리고 PC, 특히 윈도우 기반으로 개발이 되고 있습니다. 컴퓨터는 레이턴시가 심한 장비입니다. 문제는 컴퓨터의 레이턴시가 개선되기는 커녕 갈수록 악화되고 있기만 하다는 겁니다. 집, 아케이드, 콘솔이 모두 다른 레이턴시를 보이는 탓에 유저들은 점점 어느 레이턴시에 맞추어 플레이해야 할지 감을 잃어가고 있습니다. BMS나 이지투디제이를 하다 비트매니아 IIDX를 하면 점수가 똥같이 나온다고 한탄하는것도 바로 이 레이턴시 문제 때문입니다.
-
음악 게임에서의 레이턴시 문제
음악 게임은 타이밍과의 싸움입니다. 초보자든 숙련자든 간에, 타이밍이 맞지 않는 음악 게임은 그다지 기분좋은 플레이가 되지 않습니다.
다음 환경이 어떨지 생각해 보세요.
어떤 음악 게임 유저는 좋은 플레이 환경을 위해 값비싼 42인치 TV를 디스플레이로 사용하고 수십만원을 호가하는 고급 사운드 카드를 사용합니다. 키보드는 N-키 롤오버가 지원되는 고급 USB 키보드를 사용합니다. 그것도 모자라 고가의 전용 컨트롤러를 구입해서 쓰고 있습니다.
이런 환경에서 즐기는 음악 게임이 과연 좋을까요?
실제 이 유저는 아주 심한 이질감에 시달리고 있을 겁니다. 화면에 노트가 나오고 정확히 판정선에 맞춰서 눌럿지만 나쁜 판정이 연속으로 뜨고 이 유저는 대체 어떤 타이밍에 눌러야 좋은 판정이 뜰 지 헷갈리기 시작할겁니다. 화면 상단을 수건 등으로 가리고 배속을 줄인다음 플레이 하는 등의 방법으로 어떻게든 해결해 보려 하지만 이것은 일시적인 해결책에 불과합니다. 이 유저가 오락실에 가거나 콘솔판 음악 게임을 즐기면 다시 타이밍 문제로 골머리를 앓게 될겁니다.
이 유저가 심한 이질감을 느끼는 이유는 누르는 타이밍과 화면과 사운드의 반응 속도가 전혀 맞지 않기 때문입니다. 이 유저가 판정선에 아무리 정확하게 맞춰서 눌렀다고 하더라도, 이 디스플레이의 레이턴시가 500ms라면 실제로 화면에 보이는 것은 0.5초 전에 나왔어야 할 화면이 됩니다. 따라서 이 유저는 키를 0.5초나 늦게 누른 것으로 처리가 됩니다. 누른 이후에도 문제가 생깁니다. 윈도우 기반의 사운드카드는 아무리 값비싼 사운드카드라고 하더라도 44.1Khz에서 92ms의 레이턴시를 가집니다. 따라서 유저가 키를 누르고 약 0.1초 후에 소리가 나오고 0.5초 후에 판정이 뜹니다.
이 유저가 제대로 된 판정을 받으려면 0.5초나 빨리 쳐야 하기 때문에, 화면 영역은 0.5초, 즉 30프레임만큼 좁아지게 됩니다. 이 유저가 배속을 빠르게 하면 할수록 30프레임의 범위는 커지고, 보이는 것보다 훨씬 빠른 배속이 됩니다. 평상시 이 유저가 160bpm을 4배로 플레이하는 경우 0.5초만큼 레이턴시가 있다면 실제 체감 속도는 5~8배속 수준이 됩니다. 이 유저가 화면 윗쪽을 적당히 가리고 배속을 줄이면 마치 좁아진 화면 영역이 다시 회복된 것 처럼 느끼게 됩니다.
레이턴시의 원인
-
디스플레이 레이턴시 : PC 신호에서 모니터 표시까지의 레이턴시
타이밍을 망치는 가장 큰 적은 이 디스플레이에 있습니다. 구형 CRT디스플레이에 비해, 최신의 플랫 패널 디스플레이(LCD, PDP등)는 심한 레이턴시 문제를 안고 있습니다. 특히 호환성 유지를 위해 플랫 패널 디스플레이에 아날로그 포트를 남겨놓은 경우가 가장 심합니다. 심한 디스플레이 레이턴시를 가지는 경우 레이턴시가 거의 1000ms에 달합니다. 이는 평상시 사용에도 체감할 정도의 심한 레이턴시로, 마우스를 움직이는 동작이 약간 늦게 반응하는 등 컴퓨팅 전반에 큰 영향을 끼칩니다.
디스플레이 레이턴시가 발생하는 원인
모니터 내부에서의 신호 처리
만약 PC에서 발생한 디스플레이 신호를 곧바로 모니터로 전송한다면 디스플레이 레이턴시가 발생할 여지는 별로 없습니다. 그러나 많은 모니터는 모니터 내부에 화질 보정 회로를 탑재하고 있고, 이 회로에서 화질을 보정하는 동안 레이턴시가 발생합니다. 이런 모니터를 사용하는 경우 근본적인 레이턴시 해결을 위해서는 모니터를 교체하는 방법밖에 없습니다. 아날로그 입력 단자를 가지고 있는 모니터는 화질 보정 회로가 반드시 탑재되어 있습니다. 아날로그 연결만 화질 보정 회로를 거친다면 다행이지만, 특정 모니터는 아날로그 연결뿐만 아니라 디지털 연결또한 화질 보정 회로를 거치게 됩니다.
렌더링 대기 시간 (버퍼 프레임)
고사양 게임을 실행했을 때 평소보다 마우스 커서가 늦게 움직이는 것을 경험한 적이 있으실 겁니다. 그래픽 카드에서 복잡한 렌더링이 수행될 때 컴퓨터는 안정적인 프레임레이트를 구현하기 위해 몇 프레임을 미리 렌더링 해놓고 몇 프레임 전에 렌더링 했던 프레임을 출력하면서 현재 렌더링을 계속 수행합니다. 만약 렌더링 대기를 3프레임 시행한다고 하면 실제로 보고 있는 화면은 현재 그래픽카드가 신나게 렌더링하고 있는 그 화면이 아니고 48ms(3프레임) 전의 화면이 됩니다. 다행스럽게도 많은 음악 게임들은 복잡한 그래픽 연산은 필요가 없기 때문에 렌더링 대기 시간은 크지 않은 편입니다.
수직 동기화(V sync)
수직 동기화는 렌더링 대기와 비슷한 것이지만, 용도가 약간 다릅니다. 그래픽카드에서 연산할 내용이 너무 적거나 많아 초당 연산 프레임이 디스플레이의 60프레임과 차이가 나는 경우, 1프레임에 두개 이상의 렌더링 화면이 겹치는 경우가 있습니다. 화면이 좌우로 움직이게 되면 겹친 부분이 눈에 실제로 보이게 되는데 이것을 티어링(tearing)현상이라고 합니다. 티어링 현상을 제거하기 위해 화면 연산 비율을 모니터와 같게 맞추는 것이 수직 동기화(Vertical Sync)인데 보통 수직 동기화 시 1~2프레임을 대기하여 겹친 화면은 제거하고 완전한 화면을 구성하여 화면에 뿌리게 됩니다. 버퍼 프레임보다는 레이턴시가 적지만 다소의 레이턴시가 발생하는것은 사실입니다. 음악 게임은 노트가 상단에서 하단으로 움직이는 경우가 많기 때문에 수직 동기화를 끄더라도 거의 티가 나지 않습니다. (그러나 BGA에서는 티가 납니다.) 따라서 끄는 것이 좋습니다.
-
사운드 레이턴시 : PC신호에서 사운드 출력까지 걸리는 레이턴시
사운드 레이턴시는 윈도우 기반 프로그램 전반에서 나타나는 현상입니다. 이것은 다이렉트X의 사운드 처리 방법에 문제가 있기 때문으로 마이크로소프트에서 새로운 사운드 처리 방법을 마련하지 않는 한 해결하기 어렵습니다.
사운드 레이턴시가 발생하는 원인
디지털 사운드 출력을 사용하는 경우 - 디지털 스피커를 사용하는 경우 아주 적긴 하지만 처리 과정에서 약간의 레이턴시가 일어납니다. 이것은 대개 20ms이하로 사람이 느끼기에는 힘든 수치입니다만 아날로그 스피커가 디지털 스피커에 비해 레이턴시는 훨씬 빠릅니다.
Direct Sound의 한계
Windows는 커널 수준에서 데이터가 사운드카드 드라이버로 직접 전송되지 않기 때문에 Windows API를 통해 사운드를 재생할 경우 심한 레이턴시가 발생합니다. 이것은 윈도우 기반으로 게임을 개발하려고 하는 개발자들에게 있어서 골치아픈 현상이었기 때문에 마이크로소프트는 게임 개발용 API세트인 DirectX를 만들면서 이 구성 요소에 DirectSound라는 API를 새로 추가하였습니다. 다이렉트사운드는 기존에 비해 현격히 빠른 레이턴시를 보여 주었지만, 마이크로소프트는 당시 사운드카드의 성능 등을 고려해 44.1Khz, 16bit의 샘플링 레이트에서 92ms정도의 레이턴시를 가지도록 만들었습니다. 이것이 현재까지 유지되고 있는 것인데, 일반적인 게임 효과음 수준에서는 체감할만큼 심한 레이턴시는 아니지만, 음악 게임에서는 충분히 체감할 만큼의 레이턴시가 발생합니다. 사운드 쪽에서 발생하는 레이턴시는 거의 이부분이 다 차지할 정도로 큰 영향을 주고 있습니다.
-
입력 레이턴시 : 입력 장치에서의 입력이 PC에서 인식하기까지 걸리는 레이턴시
입력 레이턴시가 발생하는 원인
USB로의 전환
사실 PS/2포트는 입력 장치 전용의 패러렐 인터페이스로서 입력 장치에 대해 최적화 되어 있는 관계로 PC에서는 이것이 가장 빠르고 정확한 입력을 보장합니다. 그러나 USB 인터페이스가 보편화되면서 키보드/마우스도 USB형태로 출시되게 되고 PS/2가 필요없을만큼 널리 퍼져서 제조사들은 핫스왑도 안되는 PS/2포트 대신 USB포트나 더 넣자라는 생각을 하게 됩니다. 그래서 최근의 메인보드는 PS/2포트가 없는것이 종종 있습니다.
USB는 시리얼 인터페이스이기 때문에 사실은 동시키입력이 안됩니다. 시리얼은 0.1만 전송될 뿐이니까요. 그래서 한번에 8비트 만큼씩 데이터를 보냅니다. PS2는 패러렐이기 때문에 8비트의 신호가 그대로 한꺼번에 전송되지만 시리얼은 1비트씩 전송되고 8비트가 모이면 그제서야 입력신호를 파악할 수 있습니다. 따라서 PS/2와 같은 동작을 수행하려면 PS/2에 비해 복잡한 연산이 필요하게 되는데 이때문에 USB는 동시키 입력 제한이 7키로 한정됩니다. 또한 입력 장치와 초당 100회만 통신을 하게 됩니다. 어차피 디스플레이도 초당 60회밖에 깜박이지 않기 때문에 그렇게 많은 통신은 필요치가 않기 때문이죠. 윈도우의 기본 설정은 100회이지만 200회나 1000회 통신하도록 설정할 수도 있습니다. 음악 게임에서도 100hz정도면 충분하기 때문에 그런짓을 한다고 해도 별로 나아질 것은 없습니다. 그냥 PS/2키보드를 구입하는게 낫습니다.
외부 컨트롤러
음악 게임이 많이 나온 기종, 특히 코나미사의 게임이 많이 나온 기종이 PS2인 관계로 PS2에 쓰이는 전용 콘트롤러를 PC에 사용하려는 경우가 종종 있습니다. 이 글을 쓰는 저도 그런 식으로 이용하고 있구요. 그런데 PS2컨트롤러는 공식적으로 PC와 호환되는 장치가 없습니다. (USB컨트롤러 제외) 그래서 아마추어 개발자들이 패러렐 포트를 통해 PS2의 신호를 입력받는 소프트웨어를 개발했는데 이것이 PS2신호를 컴퓨터에 맞게 소프트웨어로 변환하다보니 약간의 지연 시간이 있습니다. 하지만 나름의 최적화를 거치면 USB키보드와 비슷한 수준의 반응은 얻을 수 있습니다. 나중에 USB에 설치하는 형태의 PS2변환기가 출시되었는데 이것이 발매되면서 전용 PC컨트롤러를 만들기 귀찮아진 일부 조이스틱 제작사들이 PS2호환 조이스틱에 USB변환칩을 달아서 출시하는 만행을 저질렀습니다. 이런 컨트롤러는 반응 속도가 느리므로 가능하면 피하는게 좋습니다.
레이턴시의 해결
레이턴시가 뭐고 왜 생기는지 알아보았으면, 해결 방법은 그 원인을 제거하기만 하면 됩니다.
-
하드웨어 개발자
최근의 하드웨어 제작사들은 레이턴시 문제를 개의치 않습니다. 특히 디스플레이 영역에서는 레이턴시는 그냥 있어도 무관하고 없으면 좋을 그런 정도로 인식되고 있나 봅니다. 디스플레이 자체가 레이턴시를 가지는 경우 디스플레이 제조사들이 해결하는 수밖에 없습니다.
새로운 사운드 제어 드라이버 표준의 개발
마이크로소프트와 사운드 카드 제조사들이 합작해서 개발해야 할 부분입니다. 다이렉트X의 3D성능은 크게 향상되었지만 다이렉트사운드는 10년전이나 큰 변화가 없습니다. 레이턴시를 해결하는 것은 고성능 칩과 새로운 사운드 제어 표준으로 해결할 수 있지만 그런 표준을 새로 만들어낼만한 매력이 없는 것은 사실입니다. 그러나 다이렉트X의 사운드 제어 기능의 향상은 애플이 상당부분 차지하고 있는 DAW 시장을 윈도우로 끌어올 수 있는 매력이 될 수도 있습니다. 윈도우 기반의 DAW를 제작한 스타인버그사는 윈도우의 사운드 제어 능력이 떨어지는 것을 을 해결하기 위해 ASIO 2.0이라는 자체 규격의 드라이버까지 만들어서 적극적으로 해결하고 있는데 마이크로소프트는 대체 뭘 하고 있는지 알수가 없군요.
-
소프트웨어 개발자
소프트웨어 개발자들은 유저들보다 컨트롤 할 수 있는 여지가 많기 때문에 레이턴시 문제에 대해서 적극적인 해결 방법을 도입할 수 있습니다.
정확한 판정선 위치 변환 기능을 탑재
이 기능은 이미 탑재한 사례가 많지만, 픽셀 단위가 아닌 시간단위로 변화시키는 기능이어야 합니다. 편의상 판정선 위치 변환이라고 적었지만, 실제로는 프레임 단위로 디스플레이를 빨리 혹은 늦게 나오도록 세팅하는 기능이 되겠습니다.
대부분의 판정선 위치 변환 기능들은 픽셀 단위로 조정되는데 이는 배속에 따라 실질적인 판정선 위치 보정량이 달라지기 때문에 실제 플레이에 도움이 덜 됩니다. (없는 것 보다는 낫습니다) 프레임 변환으로 레이턴시를 보정하는 개념은 아주 간단합니다. 레이턴시가 늦게 나오는 만큼 노트를 먼저 나오게 하면 됩니다. 레이턴시가 100ms발생하는 상황이라면 노트를 6프레임만큼 먼저 내려오게 만들면 됩니다.(ms단위로 보정할 수 있다면 더욱 좋겠습니다만 실질적으로 프레임 단위 이상이면 별 문제는 없을것 같습니다) 물론 판정 이펙트의 발생은 레이턴시만큼 늦어지겟지만 판정 이펙트가 약간 늦게 나오는 것은 유저입장에서는 크게 신경쓰이지 않는 부분입니다. 얼핏 생각하면 사운드 출력과 갭만 더 생기는게 아닐까 싶지만 사운드 출력은 화면 출력과 별도이므로 화면이 빨리 나오든 늦게 나오든 일정한 시간만큼의 레이턴시만 발생할 뿐입니다.
ASIO 2.0의 지원
ASIO 2.0은 256버퍼 16bit 48khz에서 평균 레이턴시 5ms수준의 아주 빠른 반응을 보여줍니다. 이는 인간이 체감할 수 있는 최소한의 레이턴시인 20ms 이하를 달성하는 것이고, 키를 누르자마자 거의 동시에 소리가 나는 것을 구현할 수 있습니다. 물론 ASIO 2.0을 사용하기 위해서는 다소 고가의 오디오 인터페이스를 구입해야 하지만 ASIO4ALL이라는 소프트웨어로도 어느정도 효과를 볼 수 있습니다. 정확한 판정선 변환과 ASIO 2.0지원만으로도 상당한 레이턴시 보정을 이루어 낼 수 있을 것으로 생각합니다.
다만, ASIO 2.0은 게임 프로그래밍에 일반적으로 사용되는 드라이버가 아니기 때문에 도입에 상당한 장벽이 예상됩니다.
-
유저
아쉽게도 유저 레벨에서 이 레이턴시 문제를 완전히 해결하는 것은 불가능합니다.
유저 입장에서는 이런 레이턴시 문제를 적극적으로 해결할 방법은 거의 없습니다
그러나 레이턴시가 덜 느껴지도록 보정할 수 있는 방법은 있습니다.
어느정도 레이턴시를 해소할 수 있는 방법 몇가지를 소개합니다.
디스플레이의 종류와 설치 상태를 확인
디스플레이는 그 종류와 설치 방법에 따라 레이턴시에 차이가 생깁니다. 디지털 디스플레이라면 처음부터 끝까지 디지털로 연결하는 것이 좋습니다. 디스플레이와 케이블 사이에 별도의 장치를 설치하는것도 별로 좋지 않습니다. 오픈 프레임 모니터에 고화질 구현을 위해 스케일러 박스를 설치하는 경우가 간혹 있는데 화질은 좋아질지 모르겟지만 레이턴시는 늘어납니다. 음악 게임을 위해서는 가능한한 심플한 연결 방법을 고수하는 것이 좋습니다. 최근의 하드웨어라면 DVI케이블을 사용하는것이 가장 빠른 반응을 기대할 수 있습니다. CRT를 사용하고 있다면 RGB(D-SUB)케이블을 이용하는것이 좋습니다.
수직 동기화 해제
대부분의 BMS프로그램은 수직 동기화를 쓰지 않기 때문에 별로 신경을 쓰지 않으셔도 됩니다만, 드라이버 수준에서 수직 동기화가 켜져 있는 경우가 가끔 있습니다. 수직 동기화를 끄거나 응용프로그램에서 제어하도록 하시면 됩니다.
입력 장치 확인
사실 USB와 PS/2는 반응 속도 자체만으로는 별 차이가 없긴 합니다. 하지만 키보드 사용자라면 PS/2포트를 쓰는게 좋습니다.
콘솔에 사용되는 전용 컨트롤러를 사용하는 경우 USB대응의 변환기보다는 패러렐 포트 대응의 변환기를 쓰시는게 좋습니다.
다만, 패러렐 포트 변환기는 윈도우 비스타/윈도우7에서는 동작하지 않기 때문에, 어쩔수 없이 USB대응의 변환기를 사용하는 경우라면 USB포트의 폴링 레이트를 변환 프로그램으로 약간 높혀 두는게 좋습니다. (500~1000hz정도면 충분합니다)
판정선의 수동 변환
넒은 포스트잇을 사용하면 됩니다. 판정선 위를 조금 가려 실제의 판정선보다 약간 위쪽에 가상의 판정선을 만들어 보세요.
그냥 포스트잇을 붙이는 것 만으로도 충분하지만 화면 이펙트도 상당히 많이 가리기 때문에, 이질감을 덜고 싶다면 판정선과 가상 판정선 사이 부분만 가리도록 얆게 잘라 붙이는 것도 좋습니다.
댓글 3
-
평판 표시장치에서는 어쩔 수 없이 일어나는 스케일링과 관련해서도 레이턴시가 있습니다.
제가 CRT를 꽤 오래 썼는데( 2007년까지-_-; 물론 노트북도 쓰긴 했지만, 노트북에선 리듬게임을 거의 안했고요.. ) 데스크탑 모니터를 LCD로 바꾸고나니 묘하게 판정이 잘 안맞더라고요.
그렇게 2년을 고생했는데-_-; 어느날 문득 엔비디아 장치관리자에서 화면 스케일링을 엔비디아 그래픽카드가 하지 않고 모니터가 하도록 설정( 정확하진 않지만 뭐 이런 느낌의 명령.. )으로 바꾸니깐, 아직도 살짝 딜레이가 있긴 하지만 거의 느끼지 못할 정도로 줄어들더라고요. 아무래도 제 모니터가 오픈프레임이라 잡다한게 없어서 모니터측 처리시간이 엄청 짧아서 생긴 효과일지도 모르겠습니다.
여튼 혹여나 CRT에서 하시다가 LCD로 옮겨가신 분들중에서 저와 같은 고통-_-; 을 겪으신 분이 있지 않을까 싶어 적어봅니다.
프로그래머 입장에서 해결 가능한 방법을 하나 적어보자면, 칼리브레이션 기능을 넣는건데, 단순히 판정선을 몇 ms라 몇 픽셀 단위로 조정하는 것이 아니라, 판정이 아예 없이 특정 bms를 플레이 하게 하여, 이 플레이어의 판정 분산 정도를( 아마 가우시안 분포가 나오겠죠 ) 분석하여서 조정해주면 상당히 많이 완화되지 않을까 싶네요.
-
prismatic
2010.04.27 11:45
ASIO도 카드빨좀 받지 않나요 ㅎㅎ
뭐 확실히 게임에서는 안 쓰는 드라이버라(...
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 5 | BA에 에이징은 유효할까요? [1] | prismatic | 2012.02.22 | 562 |
| 4 |
볼륨 전쟁
[2] | ![]() ![]() | 2011.01.15 | 3424 |
| 3 | 케이블 튜닝에 대해 어떻게 생각하십니까? [5] | ![]() ![]() | 2010.09.28 | 3979 |
| 2 | BMS를 쓰면서 '나 이런 점은 불편하더라' 하는 부분은 없으십니까? [5] | soft_K | 2010.12.20 | 4848 |
| » | 음악 게임에서의 지연시간(latency) 문제 해결 [3] | ![]() ![]() | 2010.03.24 | 5551 |









Powered by XE
우왕.. 토론할건 없고 읽기만 하게 되네요..
지금까지 통상 감으로만 해결하고 말던건데 말이죠;