수직 동기화 대기(V-Sync)에 대하여 설명이 명쾌하고 정리가 깔끔하게 잘 되어 있어 퍼 왔습니다. 평소 게임을 즐기면서 옵션 선택에서 가끔 혹은 자주 접하는 설정 항목인데 정확히 어떤 역할을 하는 것인지 알고 싶었는데 마침 좋은 설명글이 올라 왔더군요. ^^;


사용자 삽입 이미지


수직 동기화 대기 (Vertical Sync or V-Sync)


우리는 여태까지 수없이 많이 3D 옵션에 대한 이야기를 들었지만 정작 그것이 정확히 무엇인지는 모르고 있는 경우가 많습니다. 3D 옵션에는 여러가지가 있지만, 첫번째로 그중에서도 가장 중요한 수직 동기화 대기에 대하여 알아보도록 하겠습니다.

보통 3D 게임을 하다보면 수직 동기화 대기라는 옵션을 자주 보게 됩니다. 영어로는 Vertical Sync 또는 V-Sync라고 표시되어 있기도 하지요. [대기]라고 되어 있기 때문에 뭔가 느려지고 안좋아질꺼 같이 들리시나요? 하지만 이 옵션은 게임 화면의 품질을 결정하는데 중대한 영향을 미치게 됩니다. 이제부터 그 이유를 알아보도록 합시다.

먼저 수직 동기화 대기를 알려면 모니터에 대하여 알아야 합니다.

우리가 사용하는 모니터는 재생빈도가 있어서 초당 화면을 그리는 속도가 제한되어 있습니다. 모니터는 CRT의 경우 전자총이 화면 좌측상단에서부터 우측하단에까지 전자총이 한줄한줄 그리면서 화면을 그리게 됩니다. LCD의 경우에는 이미지 프로세서에 의하여 거의 동시에 화면이 전환되게 되지만, 액정이 전기 신호에 반응하는(움직이는) 시간이 필요하기 때문에 역시 재생빈도가 정해져 있습니다. LCD 모니터는 대부분 최대 75Hz로 제한되어 있죠.

아래 이미지에 보면 제가 쓰는 모니터의 재생빈도는 85Hz로 맞춰져 있군요.

사용자 삽입 이미지


초당 85번 완성된 화면을 그래낼 수 있다는 이야기가 됩니다. 해상도를 낮추면 전자총이 그려야 하는 픽셀수가 적어져서 재생빈도를 더욱 높일 수 있습니다. 제가 쓰는 LG CRT 모니터에서는 800x600 해상도에 최대 160Hz까지 지원을 하더군요.[각주:1]
 
모니터가 이렇게 능력이 제한되어 있기 때문에 사실 우리가 벤치마크에서 120 프레임이 나왔네 300 프레임이 나왔네 하는 것은 의미가 없습니다. 왜냐면 모니터가 초당 85장 밖에 그려내지 못하는데, 비디오 카드에서 300 프레임을 그려내면 뭐합니까, 실질적으로 모니터에 표시되는 화면은 85장(LCD는 75장) 밖에 안되는 것 입니다.
 
여기까지 읽으셨다면 수직 동기화 대기란 모니터에 성능에 맞게 비디오 카드의 작동 속도를 맞추는 것이구나라고 대충 감이 오실거라고 믿습니다. 하지만 왜 그렇게 해야 하는가... 그것에 더 중요한 비밀이 숨어 있습니다.

사용자 삽입 이미지

위의 그림은 NVIDIA의 설정 페이지에서 볼 수 있는 예제를 3프레임만 캡쳐한 모습 입니다. 1프레임->2프레임->3프레임으로 움직이면서 NVIDIA 로고가 움직이는 모습으로 보이게 되지요. 만화의 원리처럼 약간씩 모양이 다른 그림을 연속해서 그려서 보여주면 움직이는 것처럼 보이는 것 입니다.

그러면 무엇이 문제일까요? 예를 하나 들어보겠습니다. 모니터가 85Hz로 동작하여 초당 85장을 그리는데 비디오 카드가 초당 300장의 프레임을 만들어서 모니터에 보냈다고 예를 들어보겠습니다.

모니터가 1프레임을 그리고 있습니다. 그런데 비디오 카드는 벌써 2프레임을 다 그려서 모니터에 전송을 해버렸습니다.[각주:2] 모니터는 1프레임을 반쯤 그린 상태인데 벌써 비디오 카드에서 2프레임이 도착 해버렸으므로 나머지 반은 2프레임으로 그려냅니다. 결국 화면에 보이게 되는 내용은 아래와 같이 되어버리지요.

사용자 삽입 이미지


중간에 잘린 것처럼 보이는 이유는, 그 라인을 기준으로 윗쪽은 1프레임 정보가 그려진 것이고 아래쪽은 2프레임 정보가 그려진 것 입니다. 비디오 카드가 성능이 심하게 좋거나 모니터가 심하게 재생빈도가 낮아서 모니터가 1프레임 그리는 동안에 비디오 카드가 3프레임까지 그려냈다면 아래와 같이 잘린 부분이 두군데나 나타나게 됩니다.

사용자 삽입 이미지

수직 동기화 대기란 바로 이 현상을 막아주는 것 입니다. 우리는 모니터가 신호만 받는 것으로 알고 있지만, 모니터는 화면 상단에서 하단까지 한 화면이 다 그려지면 [내가 한 화면을 다 그렸으니 다음 페이지를 그릴 준비가 되었다]하고 비디오 카드에게 신호를 보내도록 되어 있습니다. 이 신호를 기다릴지 안 기다릴지 결정하는 것이 바로 [수직 동기화 대기] 옵션인 것이죠. 이 옵션을 ON 으로 설정하면 모니터에서 그릴 준비가 되었다는 신호가 올 때만 프레임 정보를 보내주기 때문에 모니터의 재생빈도 이상 프레임을 그리지 못합니다. 결국 전체 프레임도 모니터의 능력 만큼 밖에 나오지 않겠지요.

대신에 화면이 잘리는 현상이 안나타나기 때문에 훨씬 깔끔한 3D 품질을 얻을 수 있습니다. 말 그대로 프레임 수는 숫자 놀음에 불과한 것이고 품질로 비교하면 수직 동기화 대기를 켜는 것이 훨씬 우수한 품질의 이미지를 얻을 수 있는 것 입니다.
물론 가장 좋은 것은 모니터도 높은 재생빈도를 가지고 비디오 카드도 이 재생빈도 만큼 프레임을 그려내주는 것이 가장 좋습니다.[각주:3]

사용자 삽입 이미지

위 그림에서 보듯이 3D 옵션에 있는 수직 동기화 대기 옵션에서 [응용프로그램 제어]로 설정하면 응용프로그램이 내부 설정에 따라서 수직 동기화 여부를 결정하도록 할 수 있으며, [끄기]나 [켜키]를 통해서 강제로 수직 동기화 대기를 조절할 수 있습니다. 하지만 옵션에서 설정하는 정보는 OpenGL에서만 의미가 있고 Direct3D 기반으로 개발된 프로그램은 내부적으로 수직 동기화 옵션을 다시 끌 수 있도록 해놓았기 때문에 100% 적용되지는 않습니다.

이상으로 수직 동기화 대기에 대한 모든 내용을 마칩니다.


원본출처 : Parkoz

- 출처: http://www.parkoz.com/zboard/view.php?id=my_tips&page=1&sn1=&divpage=2&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=9306&cstart_page=0


  1. LCD 모니터는 해상도가 낮아져도 액정이 반응하는 속도는 변하지 않기 때문에 재생빈도는 그대로 입니다. [본문으로]
  2. 실제로는 모니터에 전송하는게 아니라 비디오 메모리의 일부 영역에 백버퍼라는 공간을 마련하여 보관하고 있습니다. 모니터가 이 메모리 영역에 있는 데이터를 참고로 해서 화면을 그리게 되는 것이죠. 백버퍼와 트리플(삼중)버퍼는 다른 강좌에서 설명해드리겠습니다. [본문으로]
  3. 수직 동기화 현상 때문에 LCD 보다 CRT가 게임에 더욱 유리하다는 말이 있는 것이기도 합니다. 재생빈도가 훨씬 높으니까요. [본문으로]

+ Recent posts