V-Sync / 테어링

V-Sync 및 테어링은 무엇입니까?

V-Sync(수직 동기화)는 RV가 사용하는 Windows 시스템 또는 컴퓨터 그래픽 드라이버의 기능입니다. RV는 프레임 렌더링을 마치면 디스플레이 장치가 현재 프레임 표시를 마칠 때까지 기다렸다가 해당 프레임을 표시합니다. 그래서 장치가 프레임을 표시하는 프로세스를 진행 중인 동안에는 업데이트 중인 프레임을 결코 볼 수 없는 것입니다. 이를 테어링(tearing)이라고 하는데, 그 이유는 수평 선의 위로 보이는 프레임과 아래로 보이는 프레임이 달라져 찢어진 듯하게 보이기 때문입니다. 때로 수평 테어링 선이 시간이 지나면서 위나 아래로 움직이기도 하고, 프레임의 한 부분에 계속 머물기도 합니다.

RV의 V-Sync 옵션

RV의 렌더링 기본 설정에는 Video Sync(동영상 동기화)라는 옵션이 있습니다. 플랫폼에 따라 이 옵션을 사용하여 V-Sync를 활성화/비활성화할 수 있습니다. OS X 및 Windows에서는 기본 동작이 V-Sync 켜기입니다. 이 플랫폼에서는 RV의 기본 설정을 사용하여 시스템 V-Sync를 비활성화할 수 있습니다.

Linux에서는 훨씬 복잡합니다. Linux의 NVIDIA 드라이버에는 완전히 다른 OpenGL V-Sync 방식이 두 가지 있는데, 하나는 드라이버 수준에서 설정하는 것이고, 다른 하나는 RV를 통해 제어하는 것입니다. 또한, NVIDIA 드라이버는 특히 여러 모니터가 GPU에 연결될 때 V-Sync 작동 방식을 제어할 수 있는 다수의 환경 변수를 인식합니다.

다양한 RV 버전

RV의 내부 렌더링은 버전 3.12.12에서 보다 "현대적"으로 바뀌었습니다. OS X 및 Windows에서는 RV가 특히 프리젠테이션 모드에서 일부 미디어를 "더 빨리" 재생한다는 사실 외에 눈에 띄는 변화는 없습니다. 하지만 Linux에서는 드라이버 버전에 따라 V-Sync가 3.12.12 이상의 RV에서 다르게 동작할 수 있습니다.

모든 플랫폼에 영향을 미치는 타이밍 문제

이해하기 가장 어려운 문제는 모니터/프로젝터의 물리적 특성, 그리고 장치에서 재생되는 미디어의 프레임 속도와 관련되어 있습니다.

재생률 60Hz(60 프레임/초) 모니터에서 24 프레임/초(24Hz) 미디어를 재생 중인 경우 24Hz 영사기에서 재생 중인 프레임 타이밍만 에뮬레이트할 수 있습니다. 말 그대로 같은 타이밍을 잡기는 불가능합니다. 그 이유는 간단한 수학으로 정리됩니다. 60을 24로 균등하게 나눌 수 없다는 것입니다. 

RV는 최대한 장치 속도(이 경우에는 60Hz)에 가깝게 재생하고 24 프레임을 실제 60 프레임으로 보기 좋게 분산함으로써 이 문제를 해결하려고 시도합니다. 프레임의 타이밍을 보게 되면 일부 프레임이 연속 3회 재생되고 또 다른 프레임은 2회만 재생되는 것을 보게 될 것입니다. 

이 문제를 해결하는 유일한 방법은 장치 속도를 미디어 속도로 균등하게 나눌 수 있도록 출력 장치 속도를 미디어 속도와 일치시키는 것입니다.

NVIDIA 드라이버를 이용한 Linux에서의 V-Sync

Linux의 NVIDIA 드라이버에는 많은 V-Sync 옵션이 있습니다.

  1. Nvidia 설정 제어판에 있는 드라이버의 OpenGL V-Sync(유사한 이름의 XVideo V-Sync는 무시)
  2. 렌더링 기본 설정에서 사용할 수 있는 RV의 V-Sync
  3. __GL_SYNC_TO_VBLANK 환경 변수
  4. __GL_SYNC_DISPLAY_DEVICE 환경 변수

아쉽게도 이 옵션은 모두 상호 작용할 수 있습니다. 다음 설정을 따르는 것이 좋습니다.

  1. 드라이버의 OpenGL V-Sync는 ON
  2. RV의 V-Sync는 OFF
  3. __GL_SYNC_TO_VBLANK를 설정 안 함
  4. GPU에 모니터가 2대 이상 연결되어 있는 경우 __GL_SYNC_DISPLAY_DEVICE를 설정하여 어느 모니터에 동기화할지 지정합니다. RV가 시작되면 드라이버가 동기화 장치를 변경할 수 없으므로 어느 장치를 원하는지 명시적으로 선택해야 합니다. 그렇지 않으면 드라이버가 직접 결정합니다(보통 "메인" 모니터 선택). 드라이버가 모니터에 대해 사용하는 이름으로 환경 변수를 설정합니다(DFP-1, CRT-1 등).

RV가 시작된 셸에서 모든 출력을 리뷰하여 V-Sync에 관한 진단 메시지를 확인합니다. RV는 테어링을 유발하는 구성을 감지하려고 시도합니다. 잘못된 구성을 감지하는 경우 셸(또는 콘솔 창)에서 이를 알려줍니다. 프리젠테이션 모드에서는 RV가 임박한 테어링을 감지할 수 있다면 팝업 대화상자로 경고를 전달합니다.

어떠한 경우에도 드라이버 V-Sync와 RV의 V-Sync를 동시에 설정해야 하는 일은 없습니다.

일반 Linux 문제

Linux에서는 커널을 여러 작업으로 튜닝할 수 있습니다. 부하가 큰 여러 컴퓨팅 작업을 진행할 때에는 대개 각 프로세스마다 더 긴 타임 슬라이스를 원하게 됩니다. 하지만 아쉽게도 더 긴 타임 슬라이스가 RV에는 적합하지 않습니다. RV는 좀 더 작은 타임 슬라이스가 여러 개일 때 최상의 성능을 발휘합니다. 커널이 긴 타임 슬라이스로 설정되어 있는 경우 재생 안정성이 떨어질 수 있습니다. 한 가지 해결 방법은 스트리밍 재생에 설명되어 있는 것처럼 RV의 실시간 스케줄링을 사용하는 것입니다.

팔로우