VSync 수직동기화란 애플리케이션의 초당 프레임을 디스플레이의 주사율을 동기화 시켜주는 것입니다.
용어정리
단어 | 설명 |
애플리케이션 | 여기서는 게임이나 애니메이션이 있는 스마트폰 어플을 말합니다. |
디스플레이 | 애플리케이션을 시각화 해주는 모니터와 스마트폰 |
프레임(영상의 사진 한 개) | 동영상을 물리적으로 환원하면 시간상 연속된 정지 사진들의 모음으로 볼 수 있습니다. 이 각각의 정지사진 하나를 프레임이라 합니다. |
FPS(초당 프레임, 프레임률) | 1초에 프레임이 몇 장 보이는지의 속도를 'Frame Rate'라 합니다. 프레임률 혹은 초당 프레임이라하며 단위가 FPS입니다. 사용자의 컴퓨터 등 그래픽 기기가 초당 얼마나 많은 프레임을 뽑아낼 수 있는지를 나타내는 수치입니다. |
주사율(화면 재생 빈도) | 화면 재생 빈도(refresh rate)라고 합니다. 그래픽 카드에서 제공한 프레임을 모니터가 얼마나 자주 새 프레임으로 교체하는지의 빈도수입니다. 즉, 1초에 얼마나 많은 장면을 표현할 수 있는지 나타내는 수치입니다. 모니터 주사율의 단위는 'Hz' 로 표기한다. |
테어링 | 화면이 급격하게 변하는 경우 화면의 상하단에 서로 다른 프레임이 그려져서 화면이 찢어지는 현상 |
수직 동기화(VSync)는 게임 또는 애플리케이션의 이미지 프레임 속도를 디스플레이 모니터 재생률과 동기화하여 안정성을 높입니다. 동기화되지 않을 경우에는 화면 전체에서 이미지가 가로로 끊기거나 중복되는 효과인 화면 찢김 현상이 발생할 수 있습니다.
VSync 기능을 켜면 결함 없이 완벽하게 정렬된 프레임을 얻을 수 있습니다. VSync 기능을 끄면 거의 무제한에 가까운 초당 프레임 수(FPS)를 얻을 수 있지만 설정에 따라 화면 찢김, 덜컥거림, 끊김이 발생할 가능성이 높아집니다.
예를 들어
모니터가 60hz고 게임의 프레임이 고정 60프레임이라면 문제가 없지만 59프레임으로 떨어지면 1프레임 차이로 인해 태어링 (화면 찢어짐)이 발생합니다. 이걸 극복하기 위해서 아에 게임의 프레임을 모니터의 주사율만큼으로 조정을 합니다. 프레임이 넉넉할 경우에는 모니터 주사율 만큼만 나오도록 하면 되니까 큰 문제가 없습니다. 하지만 프레임이 모자랄 경우에는 모니터 주사율의 절반으로 떨어트려서 동기화 시켜버립니다. 60프레임 고정이 안되면 30프레임으로 만들어버리는거죠.
그래서 Vsync를 켜주면 화면의 찢어짐은 없어지지만 인풋렉이 떨어지는 현상이 발생하여 빠른 입력을 요하는 게임이나 고사양 게임에서는 끄는게 일반적입니다. 보통은 인게임 옵션에서는 끄고, 그래픽카드 제어판에서 켜는 경우가 많습니다. 그만큼 모니터와 그래픽카드가 Sync가 잘 맞아야겠죠.
더 나아가
하지만 부드러운 화면 전환이 장점인 수직동기화는 문제점이 있습니다. 바로 65프레임뽑다가 55프레임까지 떨어지는 구간이 있는 사양에서 수직동기화를 걸면 60 ~> 30 을 왔다갔다 하게 됩니다. 이 경우 일시적 랙으로 인해 게임이 멈칫거리는 스터터링 현상을 느끼게 되며 움직임이 부드럽다고 느끼지 못하게 됩니다.
그래서 목표 프레임에 못 미쳤을 때 떨어지는 프레임 폭을 줄이기 위해 만든 기술이 3중버퍼링(혹은 트리플버퍼링) 기술입니다. 이 경우 정확하게는 아니지만 목표 프레임을 1/2단위로 줄이는 것이 아니라 2/3정도만 줄여서 60 ~> 40 정도로 줄입니다. 근데 이것도 근본적으로 큰폭의 프레임 유동성을 갖기 때문에 최근에는 아에 모니터의 주사율 자체를 게임 프레임에 맞추는 어댑 티브 싱크 기술들을 도입하게 됩니다. 지싱크나 프리싱크 같은 기술들이 그것이고 프리싱크 범위를 초과하지 않는다면 65 ~> 55로 프레임이 변할 때 주사율도 60 -> 55로 바꿉니다. (65는 60을 초과하는 것이라 60까지만 싱크 동작)
Reference
https://www.intel.co.kr/content/www/kr/ko/support/articles/000005552/graphics.html
'통합 개발 지식 > 개발에 필요한 잡다한 지식' 카테고리의 다른 글
[Mac] Backtick(`) 문자 사용 방법 (0) | 2023.07.25 |
---|---|
프레임워크 vs 라이브러리 vs 모듈 vs 플러그인 (0) | 2023.03.11 |
[용어 정리] 프로그램? 프로세서? 프로세스? (0) | 2023.02.25 |
UTF-8과 UTF-8-sig 의 차이점 (1) | 2023.02.15 |
Repository: 용어정리 (0) | 2021.09.15 |