게임/알고 싶다

수직 동기화란?

jhnambi 2022. 12. 3.
주의 :  이 글의 목적은 자기계발 용도와 게임에서 쓰이는 각종 그래픽옵션 관련 단어 (안티엘리어싱, 셰이더, 텍스쳐 품질등) 들이 처음 보는 사람에게는 굉장히 생소하고 어려워 보이기 때문에 해당 부분에 대한 이해를 쉽게 하기 위해 작성되었습니다.

주의 : 해당분야는 전문적인 분야이며 그리고 실시간 발전되는 기술입니다. 지금도 새로운 기술들이 나오고 있어 틀린 부분이 있을 수도 있습니다. 

 

 

1. 수직동기화

3D게임을 즐길때 그래픽 옵션을 보면 흔히 볼 수 있는 수직동기화라는 옵션은 누구나 한번쯤 보거나 들었던 옵션일 것이다.

 

 

수직동기화 = VSync

 

또 이중, 삼중 버퍼링과같은 옵션을 본적 도 있을텐데 정확히 이것이 게임에서 어떻게 동작하는지, 언뜻 티어링을 제거한다고 들었는데 티어링이 뭔지 궁금했던 사람들이 많았을 것이다. 이번 글에서는 수직동기화에 대해서 한번 알아보도록 하자.

 

먼저 수직동기화를 이해하기 위해선 90년대생들의 학창시절 컴퓨터실에 있던 뒷통수가 컸던 CRT모니터가 사용된  옛시절로 돌아가야한다. 

 

90년대생이라면 학창시절에 놓여있던 위 모니터를 기억할 것이다.

 

 

CRT 모니터는 전자를 발사해 형광물질에 맞추면 빛을 발하는 구조로 되어있는데, 한번에 발사 할 수 있는 전자의 수가 제한되어있기 때문에 모니터는 화면을 순차적으로 그리게 된다. 왼쪽에서 오른쪽으로 위쪽에서 아래쪽으로 순차적으로 말이다.

 

 

이렇게 전자를 발사해 형광물질에 맞춰 빛을 발하는 구조이다 // 출저 코어오브 아이디어

 

모니터 화면을 그림처럼 순차적으로그린다.

 

 

모니터가 하나의 수평줄을 다 그리게되면 전자층이 다시 왼쪽으로 돌아가야한다는 수평 동기 신호를 발생 시키고

모든 화면이 다 그려져서 다시 위로 돌아가야 할때는 모니터가 Vertical Blank Interval이라는 주기를 가지게 되며 너 화면 이제 다시 그려야해! 신호가 오면서 화면 새로 고침 + 수직 동기 신호가 발생하게 된다.

 

 

 

순차적으로 화면을 그리고 마지막 9를 그리고 나서 다시 그리는 신호와 함께 새로고침과 수직동기 신호가 발생한다.

 

 

여기에서 착안한 수직 동기화 옵션은 수직 동기 신호에 맞춰 그래픽카드의 화면 생성 타이밍을 맞추는 옵션인 것이다.

그렇지 않으면 '티어링' 이라는 문제가 발생하게 된다.

 

 

2. 티어링

 

티어링이란 아래와 같은 게임 화면에서 동그라미 부분처럼 화면이 찢어지는 현상을 지칭한다.

 

 

화면 찢김 현상

 

 

 

그러면 왜 이런 현상이 일어나는 것일까? 그래픽카드에서 화면을 만들게 되면 모니터에 출력하기 전 '버퍼'라는 곳에 저장하게 된다. 그러면 모니터가 새로고침을 할때마다 버퍼에서 새로운 화면을 불러오는데  '버퍼'에서 화면이 만들어 지고있는 도중 화면을 불러오면 화면이 찢어 보일 수 있다.

 

 

그래픽 카드에서 만든 화면을 버퍼에서 저장 후 모니터에 화면에 출력 된다
1이라는 그림이 만들어 지고 새로 고침 하는 도중에 버퍼에서 화면이 만들어 지고 있는 도중 모니터에 출력되면 티어링이 발생 할 수 있다.

 

 

그리고 화면이 수평으로 찢기는 이유는 CRT와 비슷하게 화면의 정보가 순차적으로 불러와 지고 써지기 때문이빈다.

이는 화면의 변화가 급격한, 주로 FPS게임에서 자주 발생한다

 

 

 

3. 수직동기화 옵션 장, 단점

이러한 점을 해결하기 위해 화면 재생빈도에 맞춰 신호를 발생시키며 신호가 발생 할 때만 그래픽카드가 화면을 만들도록 강제하는 것이 수직 동기화이다.

 

수직 동기화 신호의 예시 // 출저 : 코어오브아이디어

 

 

수직동기화 옵션의 장점은 티어링을 없애 주는 것 뿐만 아니라 프레임이 높을때 프레임을 제한해 전력소모가 낮아진다. 하지만 치명적인 단점은 프레임이 높으면 상관 없지만 조금이라도 프레임이 낮아진다면 프레임이 엄청 떨어 질 수가 있다.

 

 

60HZ 화면 재생빈도 모니터에서 프레임이 떨어 질 수 있는 상황 예시

 

 

(HZ란?  주파수 1초당 흐르는 전기가 변화 하는 횟수 예시로 50HZ는 초당 50회 변화 60HZ는 초당 60회 변화가 진행 된다. 화면 주사율(Scale rate) 또는 화면 재생빈도에서 재생률은 초당 반복수를 의미하는 HZ 단위를 사용하는데 예를들어 60HZ 재생률을 갖춘 모니터라면 1초동안 화면을 60단계로 쪼개서 보여 줄수 있는 의미이다. 60HZ - 초당 60번의 화면이 바뀌고 144HZ는 초당 144번 바뀐다고 이해하면 될 것이다.)

 

위 그림을 예시로 우리가 사용하는 모니터의 화면 재생빈도가 60HZ라고 가정하고, 60HZ로 수직동기화를 켰다고 가정해보자. 만약 프레임이 60보다 낮아진다면 16ms 마다 생성되는 수직동기화 신호를  통해 다음 신호를 기다려야 하므로 프레임이 반토막되고 게임이 끊기게 된다. 또한 게임이 끊기기전에 마우스와 키보드의 입력이 지연되는 등 렉에 걸릴 수가 있다.

 

이런 치명적인 단점을 보완하기 위해 이중, 삼중 버퍼링 옵션이 사용 되기도 한다. 앞서 말한 버퍼가 2개 혹은 3개로 늘어나는 옵션인데 버퍼가 2개인 이중 버퍼링은 거의 왠만하면 모든 3D게임에 적용되 있는 상태이다.

 

버퍼가 2개라는 뜻은 저장된 화면도 2개라는 뜻인데 화면에 만들어 지고 있는 도중 버퍼가 화면에 출력되어 티어링이 발생하기 때문에 화면이 2개로 늘어난 이중 버퍼링은 만들어 지고 있는 화면을 가져올 확률이 줄어들기 때문에 티어링이 발생 확률이 줄어들게 된다.

 

버퍼가 3개인 삼중버퍼링의 경우에는 저장된 화면이 3개라서 사실상 티어링이 거의 발생하지 않는다. 이 옵션을 Nivida에서는 'Fast Sync'라는 옵션이라는 이름을 붙이기도 했다.

 

 

CRT와 LCD 모니터의 작동원리는 다르다.

 

 

하지만 이제는 수직동기화의 개념이 거의 사라지고 있다. 옛날 CRT 모니터는 형광체가 짧은 시간내에 빛을 다하기 때문에 지속적으로 화면을 갱신시켜 화면을 만들지만 LCD모니터는 편광필터를 이용해 빛을 내는 구조이기 때문에 지속해서 화면을 갱신시길 필요가 없기 때문이다. 하지만 호환성 문제로 화면새로고침이 쓰였지만 AMD의 free Sync, 엔비디아의 G-Sync 기술이 나왔다.

 

 

 

 

Free Sync, G-Sync 이러한 기술들은 모니터가 고정적인 새로고침 빈도를 가지는게 아니라 가변적인 새로고침을 가지게 되는 기술이다. 즉 프레임 수에따라 새로고침 빈도가 달라서 티어링 현상도 사라지게 되고 지연시간도 사라지게 된다. CRT 모니터가 남긴 유산이라고 볼 수 있는 수직동기화 옵션은 언젠간 사라지지 않을까? 

 

 

 

'게임 > 알고 싶다' 카테고리의 다른 글

포스트프로세싱이란?  (0) 2022.12.18
안티에일리어싱이란?  (0) 2022.12.18
게임 엔진이란?  (2) 2022.12.03
물리엔진이란?  (2) 2022.11.27
다이렉트X 란?  (0) 2022.11.20

댓글