본문 바로가기
책벌레와 벌레 그 사이 어딘가/개념쌓기

[개념 쌓기] Horizontal Sync & Vertical Sync

by veganwithbacon 2023. 10. 11.
반응형

이래저래 공부를 할 이유가 생겨 자료를 취합하다보니, 머릿속에는 어느 정도 정리는 됐는데 나중에 다시 봤을 때 되뇌이려면 ppt보다는 블로깅이 나을 것 같아서 포스팅 하게 됐다. 겸사겸사 포스팅도 채우고  ^^
 
메인으로 알아보려고 한 것이, Video Timing의 구성이다.
 
일반적으로 VGA connector는 다음과 같이 5가지 데이터 신호로 구성된다.
1. Red
2. Green
3. Blue
4. Horizontal Sync(수평 동기화)
5. Vertical Sync(수직 동기화)
 
아래  보이는 Figure 1에서 처음 신호 3개(Red, Green, Blue)는 픽셀 데이터를 전달하는 아날로그 신호이다.

나머지 두 신호인  h-sync 와 v-sync는 모니터가 픽셀 데이터를 올바르게 표시하도록 필요한 타이밍 정보를 제공한다.
Figure 1는 비디오 데이터와 수평 동기 신호 간의 타이밍 관계를 보여준다. 비디오 라인으로 표시된 상단 파형은 단일 스캔 라인에 대한 일반적인 아날로그 비디오 데이터를 보여준다. 파형에는 비디오 데이터가 존재하지 않는 Horizontal Blanking Interval 이 존재한다. 이 빈 공간(시간)은 CRT모니터가 다음 스캔 라인을 준비하기 위해 전자총을 재정렬하는데 사용된다.
Horizontal Blanking Interval은 수평 동기 펄스를 통해 모니터에서 인식된다.
 
수평 동기 펄스에는 3 가지 중요한 타이밍 특성이 존재한다.
1. Front Porch
2. Pulse Width
3. Back Porch
 
동기 펄스의 front porch는 주사선의 비디오 데이터 끝과 동기 펄스의 초기 에지 사이의 지연을 의미한다.
펄스 폭은 동기 신호가 나타나는 기간이고, Back porch는 동기 펄스의 최종 에지와 다음 스캔 라인에 대한 처음 데이터 조각 사이의 지연 시간을 의미한다.

위 그림 2는 비디오 데이터와 수직 동기 신호 간의 타이밍 관계를 보여준다. 비디오 프레임이라는 레이블이 붙은 상단 파형은 전체 비디오 프레임에 대한 일반적인 아날로그 비디오 데이터를 보여준다. 파형에는 비디오 데이터가 전송되지 않는 공백 간격이 있는데, 이 시간은 CRT 모니터가 전자총을 마지막 스캔 라인에서 화면 상단에 다시 정렬하는데 사용된다.
 
Horizontal Blanking Interval처럼 Vertical Blanking Interval 또한 마찬가지로 수직 동기 펄스를 통해 모니터에서 인식된다.
 


 
Horizontal / Vertical Timing에 대해 어느 정도 이해가 됐다.
근데 그림에서 보이는 수직 동기화(V-sync)수평 동기화(H-sync)는 무엇일까?
 
한창 롤을 할 때, 렉걸리는 것 같다고 하면 친구가 "수직동기화 킴?" 라고 물었다.
결과론적으로 하는 얘기지만, 본체가 똥컴이었어서 키나마나 차이도 없었다. 그냥 무선으로 해서 렉이 오지는 거였거덩...
아무튼!
 

Vertical Synchronization(V-sync)

: 컴퓨터 디스플레이에서 그래픽 카드의 프레임 생성과 모니터의 프레임 출력 타이밍을 맞추도록 하는 설정.
  아날로그 영상 신호에서 프레임 시작을 나타내는 신호의 이름에서 유래. 요즘은 온라인 게임이나 비디오 게임 옵션에서      Vsync나 수직동기화로 표기 되는 것이 바로 이것이다.
 
대부분의 사람들이 수직동기화를 대충 어떤 기능인지는 알지만, 의외로 수직동기화를 키면 프레임이 떨어지는 식으로 생각하는 사람들이 많다.
 
수직동기화에 대해 이해하려면 우선 모니터의 작동 구조에 대해 간략히 알아두는 것이 이해하기가 쉽다.
모니터에는 수직 주파수와 수평 주파수가 있는데, 수직 주파수는 1초 동안 모니터가 화면을 표현해주는 횟수를 말하며 수평 주파수는 모니터 수평으로 화면을 1초당 몇 번 뿌려주는지에 대한 수치인데 이 중에서 수직동기화와 관련 있는 것은 수직 주파수다. 1초에 화면에 몇 번 보여주는지에 대한 수치를 Hz로 표현한다고 보면, 예로 60Hz는 초당 60번을 보여주는 것이다. 예전 CRT 모니터 사용 시절에는그래픽 카드에서 사용자가 직접 설정이 가능했으나, 최근 사용되는 LCD모니터는  60Hz로 고정된 경우가 대부분이다.(대개 수평 주파수는 수직 주파수에 맞춰 자동 변경 되기에 별도 설정옵션이 없음)
 
고성능 하드웨어를 장착한 PC에서는 아무리 높은 FPS를 보여줘도 수직 주파수의 제약에 벗어날 수 없는 것도 다음 이유이다. FPS의 개념 상 초당 보여지는 화면 개수인데, FPS가 아무리 좋다한들 실제 화면 상의 보여지는 모니터 상의 수직 주파수의 간섭을 피할 수 없기 때문이다. PC가 연산하는 능력과 모니터에 표현되는 차이로 인한 손실은 당연한 것이다.
=> 고사양 pc에서 FPS가 100이상이 나오는데 모니터 수직주파수가 60으로 고정이기에 컴퓨터가 삽질을 함.
     이를 방지하는 것이 수직동기화이다.
 
 
https://www.youtube.com/watch?v=V5kb0ixuLqU 

VSync에 관한 설명 영상

위 영상처럼 화면이 옆으로 갈라지며 떨리는 것 같은 증상을 티어링(tearing)이라 한다.
티어링은 프레임이 최고점을 찍은 후에 떨어지는 상황에 발생한다.

 보통 게임들의 프레임은 수직동기화를 켜지 않은 상태에서는 위 아래로 요동을 친다.
이 상태에서 프레임이 최고점을 찍고 내려가는 과정에서 기존의 프레임을 후에 프레임이 부드럽게 이어가지 못하며 티어링이 발생하는 것이다. 예를 들어 최고점 프레임이 120fps인 상태에서 후에 100fps로 변하면 기존 120개를 100개로 대체하려고 하다보니 이 과정에서 빈자리만큼 화면이 출렁거리는 문제가 발생하는 것이다.
 
수직동기화를 켜면 일정하게 60프레임으로 지속되기 때문에 티어링 현상은 해결 가능한데, 수직동기화를 키면 또 다른 문제가 발생한다. 수직 동기화는 모니터의 수직주파수와 fps를 강제 동기화시키는(일치시키는) 기술인데 수직동기화를 켜면 60보다 아무리 높은 프레임이 나와도 FPS는 60에 고정이 되지만, 60보다 낮은 프레임이 나오면 30으로 고정된다.
60과 30은 두배의 차이가 나기 때문에 화면이 뚝뚝 끊기는듯한 부자연스러움을 느끼게 된다. 흔히 말하는 스터터링(Stuttering, 일시적 렉으로 인해 게임의 움직임이 겉보기에 버벅거리는 현상) 이다. 때문에 많은 유저들이 수직동기화를 사용했을 때 프레임이 떨어진다고 느끼게 되는 주요 원인 중 하나다.

위 그래프를 살펴보면 수직동기화 해제시에 부드럽게 물결치며 이어지던 그래프가 수직동기화를 적용함과 동시에 30프레임과 60프레임으로 구역이 나뉘는 것을 볼 수 있다.
 
게임 내의 프레임 향상과 모니터의 주파수와는 전혀 무관하기 때문에 해결이 불가능하다.
(고철을 광을 낸다고 아이언맨 슈트로 변하지는 않는 것처럼)
pc 사양을 업그레이드 하거나 게임 옵션을 낮추는 것이 제일 쉬운 방법이다.
적응형 동기화가 적용된 모니터를 사자. 제일 좋은 방법이다.
 
예시를 들며, 이해하고 눈에 많이 띄는 자료들을 취합하다보니 대부분이 게임에서 비롯됐으나 이해하는데는 문제가 없었던 것 같다.
다들 이해됐지?

눈으로 보면서도 이해가 됐지만, 정리를 하니까 확실히 기억에 남는 것 같다. 
 
 
 
참고 링크 :
https://thecraftdaily.com/ko-kr/what-is-screen-tearing-and-vsync/
https://www.eecg.utoronto.ca/~tm4/rgbout.html 
https://namu.wiki/w/%EC%88%98%EC%A7%81%EB%8F%99%EA%B8%B0%ED%99%94 
https://namu.wiki/w/%EC%88%98%EC%A7%81%20%EA%B7%80%EC%84%A0%20%EC%8B%9C%EA%B0%84 
https://www.techspot.com/article/2192-screen-tearing-fix-pc-gaming/ 

반응형

댓글