+ 이 글은 작성자가 직접 공부하고 복습하며 작성한 글입니다. 만약 직접 작성하지 않았다면, 꼭 출처를 밝히겠습니다!

 + 이 글은 개인적인 공부를 바탕으로 작성되었기에, 틀린 부분이 있을 수 있으며, 틀린 부분이 있다면 알려주시면 감사하겠습니다!

 + 이 글을 다른 곳으로 가져가신다면, 꼭 출처를 남겨주세요~

 + '참고사이트'는 공부하기 위해 참고한 사이트들을 모아 둔 것입니다.

 + 혹시라도 문제가 된다면 바로 조취를 취할테니, 말해주시면 감사하겠습니다!


  Unity Engine을 사용하다보면, 성능을 검사하기 위해 Profiler를 사용하게 됩니다. 특히 CPU Usage를 통해 최적화 부분을 고민하게 되는데요, 오늘은 제가 Profiler를 보며 최적화를 해보는 도중 알게된 VSync 옵션에 대해 정리해보겠습니다.


[ VSync ]

 + 일단 VSync는 'View SyncTime(SyncTime 보기)'의 줄인 말로써, CPU 작업과 GPU 작업간의 동기화를 시켜주는 옵션입니다.


 + 일반적으로 GPU 작업이 CPU 작업보다 10배정도 많습니다. 그래서 이 부분을 동기화해주기 위해, CPU에 'Wait For Target FPS(타겟 FPS 대기)'를 걸어 GPU의 작업이 완료될 때까지 기다리게 합니다.


 + 'Wait For Target FPS(타겟 FPS 대기)', 이 부분이 있기에 FPS는 60FPS 정도로 유지되는 것이며, 말 그대로 대기 시간이므로, 얼마나 프레임에 여유가 있는지를 나타내는 척도가 되기도 합니다.

               

- 사용 전 -                                                                - 사용 후 -



<Why>

 + 왜나햐면 비동기화로 인해 발생할 수 있는 "Tearing"현상을 없애기 위해서입니다.

          í…Œì–´ë§ì„ 시뮬레이션한 예. 확대된 부분에 그림의 변화가 분명히 보입니다.

[출처] Unity 공식 매뉴얼 : https://docs.unity3d.com/kr/current/Manual/class-QualitySettings.html


 + 위의 그림에서 보이는 현상이 Tearing인데, 이 현상이 발생하는 이유는 디스플레이가 Update되는 프레임과 Unity 프레임이 서로 따로 Update되기에 동기화가 되지 않을 수 있기 때문입니다. 디스플레이가 이전 프레임을 렌더링하는 동안, 새로운 Unity 프레임이 Update되서 일어나게 되는 것이죠.



<VBlank>

 + 디스플레이 디바이스는 주기적으로 업데이트됩니다. 그것은 하드웨어의 Clock과 비슷한데, 그 주기 사이에 업데이트 되지 않는 빈 공간을 VBlank라고 합니다.


 + 이 부분에 Unity 프레임을 Update함으로써, 디스플레이에 영향을 미치지 않도록 할 수 있습니다.


 + Unity뿐만 아니라, 다른 디스플레이를 사용하는 분야에서는 모두 사용되는 개념입니다.



<Usage>

 + Vsync기능은 생각보다 많은 분들이 선호하지는 않는 기능입니다.

1) 이 기능을 사용하게되면, 동기화를 위해 의도적인 프레임 드랍이 발생할 수 있습니다.  앞서 말했듯이, Vblank에 맞추기 위해 자체적으로 대기시간을 주게되어 120fps가 나올 수 있는 상황을 60fps로 만들어 버립니다. 많은 사람들이 60fps보다 더 높은 fps를 뽑아내는게 더 좋다고 여기기에, 잘 사용하지 않습니다.

2) Vsnyc를 사용했을 때, 원래 fps가 60이하이면, 30fps로 유지된다고 합니다. 아마 Vblank주기 때문에 절반으로 감소한 것 같습니다.



<Setting>

 + Unity -> Edit -> Project Setting -> Quality -> Other -> Vsync Count



 + Don't Sync : 동기화 하지 않음

 + Every V Blank : 매 V Blank와 동기화

 + Every Second V Blank : 매 2번째 V Blank와 동기화





Copyright © -강정이좋아- 무단 전재 및 재배포는 하지 말아주세요.

+ Recent posts