[그래픽스] VSync와 Multiple Buffering

윤태웅·2022년 9월 2일
0

그래픽스

목록 보기
12/13

개요

(몬스터헌터 라이즈의 디스플레이 옵션창)

어떤 게임을 하던간에 위와같은 그래픽 옵션설정은 기본으로 들어있다.
그리고 나는 이를 보고 다음과 같은 생각들을 많이 했다.

  • FPS가 모니터 주사율보다 많이 찍히는 게임에서 프레임 레이트 상한을 걸면 뭐가 좋은가?
  • 수직 동기화가 무엇인가?

오늘 글에서는 이에 대한 근본적인 탐구를 진행한다.

VSync(수직동기화)

Tearing(테어링)


Tearing현상은 위 그림과 같이 이전 프레임의 데이터들이 현재 프레임의 데이터에 섞여 들어와서 마치 화면이 엇갈린듯한 느낌이 들게하는 현상을 의미한다. 이러한 Tearing은 모니터의 주사율(hz)보다 화면의 갱신률(FPS)이 더 크면 발생한다. 왜냐하면, 모니터는 본인의 페이스에 맞게 좌상단부터 우하단까지 백버퍼에 저장된 데이터를 그려나가게 되는데, 모니터 주사율보다 높은 주사율로 갱신되는 게임이 모니터가 중간까지 그리다가 갑자기 모니터야 이제 그거말고 내가 주는 새 그림 그려줘 하고 모니터가 그리던 데이터를 바꿔치기 하기 때문이다.

VSync(Vertical Synchronization)

Tearing현상을 막기 위해 VSync(Vertical Synchronization)기술이 등장했다.
Vertical이란 단어의 유래는 CRT모니터에서 전자총을 다 쏘고 다음 화면을 그리기 전의 시간을 나타내는 Vertical Blanking Interval에서 유래했다.
이 기술은 게임의 주사율을 모니터의 주사율을 넘지 못하도록 동기화를 시키는 것이다. 구현은 간단하다. GPU가 일을 빨리 끝마쳐도 VSync타이머를 지나기 전에는 Back Buffer Swapping을 시키지 않으면 된다.

VSync 장점: Tearing방지
VSync 단점: 인풋 렉(GPU가 미리 그린 데이터를 일정시간이 지날때까지 보여주지 않아서), GPU처리시간이 VSync갱신 주기보다 길 시 반토막나는 프레임

Adaptive V-Sync

VSync가 모니터 주사율보다 게임 주사율이 낮을때 프레임이 반토막나는 현상을 막기위해 등장한 기술, 구현은 모니터 주사율보다 게임 주사율이 낮으면 VSync를 끄는 방식.

Adaptive Sync


기존 VSync

NVidia GSync

VSync기술은 위에서 언급했다시피 모니터의 주사율보다 게임의 주사율이 떨어질 시 프레임이 반토막나버리는 문제점이 있다. 이를 해결하기 위해 나온 기술이 적응형 Sync, Adaptive Sync이다. 구현 원리는 모니터의 주사율보다 게임의 주사율이 떨어지는것을 감지하고 모니터의 주사율을 조정하는 기술이다.

GSync와 FreeSync

Adaptive VSync의 종류로는 NVidia의 GSync,Amd의 FreeSync기술이 있다. NVidia GSync는 하드웨어로 구현되어있고 Amd FreeSync는 오픈소스 소프트웨어로 구현된다. NVidia GSync는 라이센스 비용이 매우 비싸서 매우 고가 모니터에만 적용되어있다.

Multiple Buffering

Double Buffering

Double Buffering은 하나의 Front Buffer, 하나의 Back Buffer를 GPU VRAM에 두고 Front Buffer는 모니터가 출력을 할때 참고하며 Back Buffer는 GPU가 그리는 구조를 말한다. 이러한 2가지 단계로 나누어 놓은 이유는 모니터가 출력을 하기 위한 데이터는 GPU가 수정하지 못하게 막아놓기 위함이다. 현대 운영체제들의 기본적인 모니터 출력방식은 Double Buffering을 사용한다.

Triple Buffering

VSync가 적용된 Double Buffering의 문제점인 GPU가 Back Buffer에 다음 Frame을 작성했는데도 VSync타이머가 돌지 않는다면, GPU가 놀게되는 현상때문에 등장한 기술이다. Triple Buffering은 Double Buffering에 Back Buffer하나를 추가한 형태를 의미한다.
위의 그림을 보면 이해가 빠르게 될 것이다. Triple Buffering을 사용하면 VSync가 적용된 Double Buffering에서 특정 프레임의 처리시간이 길어지면 순간적으로 프레임이 반토막나는 case가 해결된다. 왜냐하면, Triple Buffering은 추가적인 Back Buffer를 하나 더 두어서 GPU가 Back Buffer하나의 작업을 끝마치고 Swap을 기다리던 Double Buffering과 달리 바로 추가 Back Buffer에 그리는 작업을 시작하기 때문이다. Adaptive Sync와 목적이 비슷한 기술이다.

Quadruple Buffering?

2중버퍼, 3중버퍼가 있으니 4중,5중버퍼도 있을것 같지만, 없다.
그 이유를 구글링해서 알아보려 했으나 명확한 답은 얻지 못했다.
그래서 내 나름대로 그 이유를 뇌피셜로 추측해봤다. 나중에 확실히 답을 얻으면 수정할 예정이다.

4중 버퍼를 사용하면 현재 화면에 4프레임전 데이터를 보여주는 것이라 사용자들이 불편해함(뇌피셜)

0개의 댓글