제목이 너무 거창하네요
이번에 nVidia에서 g-sync compatible이라는 이름만 바뀐 freesync기능을 풀었습니다.
저도 freesync 모니터를 가지고 있어서 이것들이 무엇인지, 적용할려면 어떻게 해야하는지
엄청나게 검색해보았고, 제가 나름대로 깨달은 부분을 공유하고자 합니다.
제가 전문가가 아닌 어설픈 선무당일 수 있으므로 틀린 부분은 댓글로 지적해 주시면 감사하겠습니다.
1. v-sync
v-sync는 말 그대로 vertical retrace 즉 모니터의 화면을 그리는 것과 frame을 동기화(synchronize의 sync) 시키는 것입니다.
이를 통해서 얻을 수 있는 것은 화면이 온전히 완성된 상태에서만 출력이 되기 때문에
화면이 비틀리는 일이 나타나지 않게 됩니다.
위의 그림을 보시면 중간에 화면이 찢어진(tearing)것처럼 보입니다. v-sync가 없다면
그래픽 카드가 프레임버퍼(한마디로 캔버스역할을 하는 메모리영역)에 쓰는 도중에 완성하지 못하면
완성되지 못한 이미지를 모니터에 그냥 출력하게 됩니다. 즉 한 화면에 두 개 이상의 프레임이 동시에 보이는 것이죠
(상단 1/2은 현재 프레임, 하단 1/2은 이전 프레임식으로요)
이를 해결하기 위해 나오는게 v-sync이며, 대부분의 콘솔(x-box와 ps4... x-box는 후술할 free sync를 도입하긴 합니다.)에서는
v-sync가 강제되어 나옵니다.
v-sync의 원리는 간단합니다. 프레임 버퍼(캔버스)를 2장 쓰는 거죠
즉 front와 Back의 프레임버퍼가 있고, 그래픽 카드는 back frame버퍼에 쓰고 완성된 순간 front buffer로
이미지를 복사합니다.
이를 개선하여 아예 back 프레임 버퍼를 2개가지 두고 (총 3개의 버퍼, 삼중버퍼링, triple buffering)
back frame buffer A에 그래픽카드가 이미지를 완성 --> back frame buffer A에서 front buffer로 복사
-->(만약 back buffer가 하나라면 이 복사하는 동안 그래픽카드가 놀아야 하나) 동시에 back frame buffer B에
다시 렌더링 시작 -->back frame buffer B에서 front buffer로 복사 --> 반복
과 같은 방식을 쓸 수 도 있습니다.
단점은 인풋렉이 증가하며 stuttering이 증가합니다.
간단히 설명해 보겠습니다. 60프레임 모니터(초당 60번 이미지 갱신)에 40프레임(초당 40번 이미지 완성)을 출력을 합니다.
그러면 어떤 프레임은 제 시간에 출력이 되지만 필연적으로 어떤 프레임은 모니터에 두 번 이상 출력됩니다.
엄청나게 거슬리게 끊겨 보일것입니다. 오히려 이런 경우 30프레임으로 아예 낮추는 것이 더 자연스러울 수도 있습니다.
두 줄요약: v-sync는 화면 tearing을 없애준다.
v-sync는 인풋랙과 stuttering을 발생시킨다.
2. adaptive-sync란?
v-sync는 모니터가 일정한 간격으로 화면을 갱신해서 발생하는 것입니다.
60프레임 모니터는 무조건 1/60초마다 화면을 갱신합니다. 따라서 1/60초내에 프레임을 완성하지 못하면
한 프레임이 2/60초이상 모니터 화면에 있게 됩니다. (같은 화면이 계속 보여져서 끊겨 보이는 이유입니다)
adaptive sync는 이제 더이상 일정한 간격으로 그래픽카드에 이미지 갱신을 요청하지 않습니다.
그래픽 카드가 프레임버퍼에 쓰기를 완성한 순간, 모니터에 이미지가 완성되었다고 보고하고 모니터는 2/60초까지
기다리지 않고 바로 이미지를 갱신하게 됩니다. 이것이 바로 variable refresh rate(VRR)를 가지는 모니터입니다.
즉 매 1/60초마다 화면을 갱신하는게 아니고 어떤 프레임은 1/60초만에 갱신하고 다음 프레임은 1/40초 만에 갱신할 수 있습니다.
단점으로는 모니터가 adaptive-sync를 지원해야 합니다. 즉 VRR이 가능해야 합니다.
장점으로는 인풋랙 최소화, stuttering최소화가 되며 tearing도 없애 줍니다. 이렇게만 보면 이상적인 것 같습니다.
다시 이에 대해서 뒤에서 이야기 하겠습니다.
한줄요약: adaptive sync는 그래픽카드가 모니터 화면 갱신을 요청함으로써
tearing을 없애는 동시에 input lag을 최소화 한다.
3. 그렇다면 free-sync는 무엇인가?
간단히 말해서 free-sync는 adaptive-sync의 일종이며 인텔과 nVidia의 지원으로 거의 표준이 되었습니다.
그렇다면 free-sync로 충분할까요? 아닙니다. free-sync에도 약점은 있습니다.
이번에는 1/60초 갱신 모니터에 1/75초 갱신 프레임을 생각해봅시다.
즉 프레임이 모니터 refresh rate을 넘어가는 상황을 생각해 보는 것입니다.
이때 free-sync는 온전히 v-sync로 작동합니다.
(v-sync를 끌수도 있으나 그럴경우 다시 tearing이 나타납니다.)
그렇다면 어떻게 되느냐
어떤 프레임은 1/60초에 정상적으로 화면에 표시가 됩니다. 다음 프레임도 정상적으로
출력이 될 수도 있고, 안될 수도 있습니다. 즉 그래픽카드는 1초에 75개의 이미지를 그렸는데
그 중 60개만 출력이 되는 상태가 올 수 있습니다. 그래서 micro stuttering이라는 것이 생깁니다. (micro stuttering아닙니다ㅠ.ㅜ)
모든 프레임이 연결되어 보이지 않고 중간중간 빠져서 끊기는 듯한 느낌을 줄 수 있습니다.
오히려 120프레임같이 최대프레임의 정수배로 출력이 된다면 이러한 느낌은 사라지겠지만
1~2배 사이의 프레임을 그래픽 카드가 출력한다면 다시 끊기는 것을 느끼게 됩니다.
다만 free-sync가 가지는 고유의 장점도 있습니다.
Low Framerate Compensation(LFC)로 free-sync가 지원하는 최소 frame rate보다 frame이 더 떨어지게 되면
이를 보완하여 특별한 알고리즘을 통해서 중간중간 추가적인 frame을 생성하여 부드러움을 증가시킵니다.
다만 이를 위해서는 최대 frame rate가 최소 frame rate보다 2.5배 이상이어야 합니다.
보통 최대가 144hz라고 한다면 적어도 57~144Hz가 freesync범위에 있어야 하며
120hz가 최대라면 48~120Hz가 freesync범위에 있어야 합니다.
60hz라면 24~60hz가 freesync범위어야 하는데 이러한 모니터는 존재하지 않습니다.
다른 장점으로 HDMI로도 freesync가 가능합니다. xbox는 업데이트로 freesync를 지원합니다!
세줄요약
freesync는 adpative sync의 일종, 실제로 거의 산업 표준급
freesync는 최대 프레임레이트를 넘어가는 frame에서는 무용지물, 즉 frame limiter가 필요하다
freesync는 LFC기능을 가지고 있으며(특정 조건이 필요) HDMI로도 구현이 가능하다
4. G-sync란?
g-sync는 adaptive sync의 일종이나, 위에서 언급한 프레임버퍼가 아예 따로 밖으로 빠져 나와있고
이것이 바로 흔히 이야기하는 하드웨어 G-sync모듈입니다. 이 모듈에서 적절한 알고리즘으로
tearing없는 화면을 출력하게 됩니다.
장점으로 g-sync는 free-sync처럼 작동하는 주파수범위 없이 모든 주파수에서 작동합니다. (0~144hz처럼)
g-sync역시 최대 frame rate을 넘어가면 v-sync나 후술할 fast-sync로 바뀝니다.
g-sync는 창모드에서도 사용이 가능하며, 최근들어 HDMI에서도 지원가능하게 바뀌었습니다.
(가능한 그래픽카드를 모르겠네요 2000번대 그래픽카드가 가능하다고 해도 현재 지원하는 모니터는 없는
걸로 알고 있습니다.)
장점: free-sync대비 더 잘 동작하며, 창모드에서도 사용가능하다
단점: 지금은 DP포트만 지원을 하며, 가격이 비싸다
5. fast-sync란?
nVidia 1000번대 그래픽카드에서 지원하는 새 기술입니다. 3중(triple)버퍼링과 비슷하지만 살짝 다릅니다.
위의 그림을 보시면 buffer가 3개가 있는 것을 볼 수 있습니다. double buffer방식에 비해서 버퍼가 하나 더 증가함으로써
그래픽카드가 버퍼가 비워질 시간을 기다릴 필요가 없이 더 빨리 쓸 수 있습니다. 디스플레이 입장에서는
더블버퍼를 쓰던지 아니면 트리플버퍼를 쓰던지 알 수가 없습니다.즉 이 기술은 디스플레이와 무관한 기술입니다
(이중 버퍼를 이용한 v-sync가 디스플레이와 무관하듯이) 삼중버퍼기술의 개량형인 fast-sync도 디스플레이와 무관합니다.
이 기술의 장점은 g-sync와 free-sync가 모니터의 최대 frame rate를 넘어설 경우 sync가 깨지는 것과 반대로
그래픽카드의 frame rate가 모니터의 최대 frame rate를 넘어갈때 유용합니다.
만약 최대 주파수 이상의 fps때문에 (g-sync나 free-sync를 쓰더라도) 화면에 tearing이 생긴다면
v-sync를 걸어줄 수도 있으나 fast-sync를 v-sync대신에 쓴다면 input lag을 최소화 할 수 있다.
2줄 요약: fast sync는 개선된 삼중버퍼기술로써 모니터와 상관없이 nVidia그래픽카드에서 활성화가 가능하다
지금까지 썼던 기술들과 달리 최대 프레임 제한을 넘어서는 fps를 사용할때 필요한 기술이다
다시 정리하자면
1. freesync나 g-sync compatible(g-sync말고요!) 모니터가 있다면 일차적으로 fast-sync를 켜보자
2. free-sync는 매우 잘 작동하며 호환성이 높은 기능이나 그 한계가 있다. g-sync는 free-sync보다는
더 나은 결과를 보장하나 더 비싼 가격을 치러야 한다.
3. fast-sync를 지원하지 않는 그래픽카드를 가지고 있고 free-sync나 g-sync를 쓴다면
프레임 제한기를 사용하자(riva tuner)
아직까지 저는 freesync(G-sync)+fastsync조합이 freesync + frame limitter조합보다 더 나은지 여부를 찾지 못했습니다.
어떤 것이 더 좋은지는 잘 모르겠습니다
대충 여기 있는거 기억나는데로 이야기 하면 레그 줄이기 위해서는
1. fast sync는 프레임이 모니터 표기 가능 프레임보다 몇배 높을 때 효과 있음(g-sync랑 함께 쓰면 lag time 증가함)
2. 제일 좋은 방법은 nvidia 제어판내 v-sync on+gsync on(전체화면일때)+게임내 vsync off+전체화면 +
frame limit은 화면 최고 주사율 -3으로 (60hz면 57 fps, 144hz면 141 fps, 200hz면 197 fps)
이었습니다. 효과는 모르겠어요;; 일단 이대로 하면 테어링 별로 안 느끼는건 맞는데 레그 줄인다고 fps 줄이면
배그에서는 또 발사속도가 느려진다고 하더군요;(배그가 발적화라서 fps에 발사속도가 영향 받는다고... )
저는 개인적으로 모든 설정에서 꺼야된다고 생개합니다
머가 더 좋은지 아직 잘 모르겠어요
이러한 현상이 마이크로 스터터링을 야기하지는 않습니다.
패스트싱크의 경우 지싱크와 별개의 기술로 봐야하구요 (물론 지싱크를 사용하며 패스트싱크를 켤 수도 있습니다)
AMD도 패스트 싱크와 같은 기능을 하는 인핸스드 싱크라는 기능이 있으니 양쪽이 대등하다고 봐야하구요
프리싱크 역시 창모드에서도 사용 가능하구요
지싱크에서 패널 지원 주파수 이하에서 작동하는건 프리싱크의 LFC 기능 처럼 프레임 뻥튀기를 지싱크 모듈에서 해주는거지
실제로 패널의 주파수가 1Hz까지 내려가는건 아닙니다.
혹시 g sync + fast sync가 더 나을지, 아니면 g sync + frame limiter가 더 나을지 의견이 있으신가요?