답변:
GPU가 화면에 새 프레임을 표시하면 "스캔"프로세스에서 HDMI 케이블 (또는 모든 종류)을 통해 이미지를 전송합니다. 픽셀은 일반적으로 왼쪽에서 오른쪽으로, 위에서 아래로 선형 순서로 전송됩니다. 이 작업을 수행하려면 새로 고침 간격이 대부분 소요됩니다. 예를 들어 60Hz에서 한 프레임은 ~ 17ms입니다. 각 스캔 아웃은 약 15-16ms가 소요되며 1-2ms의 vblank가 표시됩니다 (정확한 값은 디스플레이 및 비디오 모드에 따라 다릅니다).
전통적으로 렌더링은 더블 버퍼링으로, GPU 메모리에 두 개의 버퍼가 저장되어 있음을 의미합니다. 하나는 현재 스캔되고있는 버퍼 ( "프런트 버퍼")와 다른 하나는 렌더링되는 버퍼입니다 ( "백 버퍼"). 각 프레임, 두 프레임이 서로 바뀝니다. GPU는 스캔되는 동일한 버퍼로 렌더링하지 않으므로 불완전한 프레임의 일부를 볼 수 있기 때문에 아티팩트를 방지합니다. 그러나 각 프레임이 스캔되기 전에 몇 ms 동안 버퍼에 앉아있을 수 있기 때문에 부작용으로 인해 지연 시간이 증가합니다.
VR은 대기 시간에 매우 민감하므로 바람직하지 않습니다. 다른 방법은 프론트 버퍼에 직접 렌더링하는 것이지만 스캔 아웃에 도달하기 직전에 이미지의 각 라인을 렌더링하도록 시간을 매우 신중하게 제한합니다. 이를 "스캔 라인 레이싱"또는 "레이스 레이싱"(CRT 요일로 돌아가는 "빔")이라고합니다. 이 정도는 이미지를 스캔 라인 순서로, 즉 픽셀이 스캔되는 순서와 동일하게 렌더링해야합니다. 문자 그대로 한 번에 한 줄씩 렌더링 할 필요는 없습니다. 몇 픽셀 높이의 얇은 스트립으로 렌더링 할 수는 있지만 이미 돌아가서 편집 할 수 없으므로 순서대로 수행해야합니다. 스캔되었습니다.
이 방법에는 많은 단점이 있습니다. 매우 엄격한 성능 요구 사항이 있으며 vsync에 대해 매우 신중하게 시간을 설정해야하며 렌더링 프로세스가 크게 복잡해집니다. 그러나 원칙적으로 지연 시간을 밀리 초 단축 할 수 있으므로 VR 사람들이 관심을 갖는 이유입니다.
가장 좋은 점은 스캔 당 쿼리에 대한 액세스 권한없이 스캔 라인의 정확한 래스터 정확도를 최종적으로 예측할 수 있다는 것입니다.
https://www.youtube.com/watch?v=OZ7Loh830Ec
나는 눈물 선의 위치를 예측하기 위해 VSYNC 오프셋으로 정확한 마이크로 초 정확도의 공식을 생각해 냈습니다. VSYNC OFF 동안 티어 라인은 항상 래스터 정확하므로 반복적 인 VSYNC OFF 버퍼 스와핑을 통해 스트립 레벨 "시뮬레이션 된 전면 버퍼 렌더링"중에 가시성에서 벗어날 수 있습니다.
포럼 스레드에주의를 기울이십시오-지속적으로 추가되는 오픈 소스 코드가 있습니다-https://forums.blurbusters.com/viewtopic.php?f=10& p=32002