[게임] V-Sync 수직동기화
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
수직 동기화의 "수직"은 화면을 그리는 방향에서 온 말이다.
CRT 모니터의 전자빔은 화면 왼쪽에서 오른쪽으로 한 줄을 그린 뒤 왼쪽으로 돌아와 한 칸 내려가 다음 줄을 그린다. 맨 아래 줄까지 도달하면 다시 화면 맨 위로 복귀한다. 이 세로 방향 복귀 구간을 수직 귀선 기간(VBI, Vertical Blanking Interval)이라 부른다. VBI 동안에는 아무것도 그리지 않는다.
이 구간에 맞춰 프레임 버퍼를 교체하는 것이 수직 동기화다. 가로 한 줄 복귀에 맞추는 것은 수평 동기화(H-Sync)다.
CRT 모니터: 전자빔으로 화면을 한 줄씩 훑어 그리던 옛 브라운관 모니터
VBI: 그 빔이 맨 아래에서 맨 위로 되돌아가는 동안 아무것도 그리지 않는 빈 시간
GPU는 화면에 직접 그리지 않는다. 백버퍼에 프레임을 완성한 뒤 프론트버퍼와 교체한다. 모니터는 프론트버퍼만 읽는다. 이 방식을 더블 버퍼링이라 한다.
문제는 교체 시점이다. 모니터가 프론트버퍼를 위에서 아래로 스캔하는 도중에 교체가 일어나면, 스캔이 지나간 위쪽은 이전 프레임이고 아직 스캔하지 않은 아래쪽은 새 프레임이 된다. 한 화면에 두 프레임이 섞인다. 이것이 테어링(tearing)이다.
테어링은 화면이 가로로 잘린 것처럼 보인다. 프레임 간 차이가 클 때 두드러진다. FPS 게임에서 카메라를 빠르게 좌우로 돌릴 때 화면 중간에 어긋난 선이 지나가는 것이 그것이다. 정적인 화면에서는 두 프레임이 거의 같아서 잘 보이지 않는다.
V-Sync는 버퍼 교체를 VBI 순간까지 미룬다.
GPU가 프레임을 다 그려도 즉시 교체하지 않는다. 모니터가 현재 스캔을 끝내고 VBI에 진입할 때까지 기다렸다가 교체한다. 스캔 중에는 버퍼가 바뀌지 않으므로 한 화면에는 항상 하나의 프레임만 존재한다.
원리는 단순하다. "기다린다"가 전부다.
V-Sync는 버퍼 교체 시점을 모니터의 수직 귀선 기간에 맞추는 것이다. 목적은 테어링 제거이고, 방법은 대기이며, 대가는 프레임레이트 손실과 입력 지연이다.
셋이 하나의 트레이드오프로 묶여 있어서 켜는 것이 옳다고도 끄는 것이 옳다고도 단정할 수 없다. 장르와 타깃 하드웨어에 따라 다르다.
파워 크립이란
온보딩이란
게임 설정에서 전체화면과 테두리 없는 창모드의 차이점