"스캔 라인 레이싱"이란 무엇입니까


13

VR에서 일하는 많은 사람들이 스캔 라인 경주에 대해 이야기하고 모션 투 포톤의 대기 시간을 개선하는 데 도움이된다고 들었습니다. 그러나 OpenGL로 어떻게 이것을 할 수 있는지는 분명하지 않습니다. 누군가 스캔 라인 레이싱의 작동 방식과 최신 GPU에서 어떻게 구현할 수 있는지 설명 할 수 있습니까?

답변:


14

GPU가 화면에 새 프레임을 표시하면 "스캔"프로세스에서 HDMI 케이블 (또는 모든 종류)을 통해 이미지를 전송합니다. 픽셀은 일반적으로 왼쪽에서 오른쪽으로, 위에서 아래로 선형 순서로 전송됩니다. 이 작업을 수행하려면 새로 고침 간격이 대부분 소요됩니다. 예를 들어 60Hz에서 한 프레임은 ~ 17ms입니다. 각 스캔 아웃은 약 15-16ms가 소요되며 1-2ms의 vblank가 표시됩니다 (정확한 값은 디스플레이 및 비디오 모드에 따라 다릅니다).

전통적으로 렌더링은 더블 버퍼링으로, GPU 메모리에 두 개의 버퍼가 저장되어 있음을 의미합니다. 하나는 현재 스캔되고있는 버퍼 ( "프런트 버퍼")와 다른 하나는 렌더링되는 버퍼입니다 ( "백 버퍼"). 각 프레임, 두 프레임이 서로 바뀝니다. GPU는 스캔되는 동일한 버퍼로 렌더링하지 않으므로 불완전한 프레임의 일부를 볼 수 있기 때문에 아티팩트를 방지합니다. 그러나 각 프레임이 스캔되기 전에 몇 ms 동안 버퍼에 앉아있을 수 있기 때문에 부작용으로 인해 지연 시간이 증가합니다.

VR은 대기 시간에 매우 민감하므로 바람직하지 않습니다. 다른 방법은 프론트 버퍼에 직접 렌더링하는 것이지만 스캔 아웃에 도달하기 직전에 이미지의 각 라인을 렌더링하도록 시간을 매우 신중하게 제한합니다. 이를 "스캔 라인 레이싱"또는 "레이스 레이싱"(CRT 요일로 돌아가는 "빔")이라고합니다. 이 정도는 이미지를 스캔 라인 순서로, 즉 픽셀이 스캔되는 순서와 동일하게 렌더링해야합니다. 문자 그대로 한 번에 한 줄씩 렌더링 할 필요는 없습니다. 몇 픽셀 높이의 얇은 스트립으로 렌더링 할 수는 있지만 이미 돌아가서 편집 할 수 없으므로 순서대로 수행해야합니다. 스캔되었습니다.

이 방법에는 많은 단점이 있습니다. 매우 엄격한 성능 요구 사항이 있으며 vsync에 대해 매우 신중하게 시간을 설정해야하며 렌더링 프로세스가 크게 복잡해집니다. 그러나 원칙적으로 지연 시간을 밀리 초 단축 할 수 있으므로 VR 사람들이 관심을 갖는 이유입니다.


1
내 질문은 현대 GPU에서 어떻게합니까? 나는 스캔 아웃을 쿼리하는 방법이 없다고 생각하며, 스캔 당 드로우 콜을 실제로 제출할 수없는 것 같습니다. 당신이 할 수 있더라도-당신은 당신의 무승부가 스캔하기 전에 거기에 도착할 것이라는 어떤 보증을 가지고 있습니까?
Mokosha

1
@Mokosha 맞습니다. 스캔 아웃을 AFAIK에 직접 쿼리 할 수있는 방법이 없습니다. 기껏해야 vsync가 (일부 OS 신호를 통해) 언제인지 알아 내고 그에 대한 타이밍으로 비디오 출력의 위치를 ​​추정 할 수 있습니다 (비디오 모드의 세부 사항을 알고 있음). 렌더링의 경우 glFlush와 렌더링이 완료되는 데 걸리는 시간을 확인하고이를 기반으로 추측 할 수 있습니다. 궁극적으로, 오류가 발생할 경우 타이밍이 느슨해 지도록 (예를 들어 스캔 아웃보다 2-3ms 앞선 유지) 가끔 인공물이있을 수 있음을 인정해야합니다.
Nathan Reed

대기 시간 증가의 효과는 vsync로 인한 것이므로 전면 및 후면 버퍼 스왑이 모니터의 vblank와 동기화됩니다. 이중 버퍼링 자체는이 문제 자체를 유발하지 않으며 픽셀이 전면 버퍼에서 한 번만 변경 될 수 있기 때문에 깜박임을 최소화하는 데 유용합니다.
Maurice Laveaux

스캔 라인 쿼리없이 래스터를 예측하는 정확한 방법을 찾았습니다. 아래 답변을 참조하십시오.
Mark Rejhon

0

가장 좋은 점은 스캔 당 쿼리에 대한 액세스 권한없이 스캔 라인의 정확한 래스터 정확도를 최종적으로 예측할 수 있다는 것입니다.

https://www.youtube.com/watch?v=OZ7Loh830Ec

나는 눈물 선의 위치를 ​​예측하기 위해 VSYNC 오프셋으로 정확한 마이크로 초 정확도의 공식을 생각해 냈습니다. VSYNC OFF 동안 티어 라인은 항상 래스터 정확하므로 반복적 인 VSYNC OFF 버퍼 스와핑을 통해 스트립 레벨 "시뮬레이션 된 전면 버퍼 렌더링"중에 가시성에서 벗어날 수 있습니다.

포럼 스레드에주의를 기울이십시오-지속적으로 추가되는 오픈 소스 코드가 있습니다-https://forums.blurbusters.com/viewtopic.php?f=10& p=32002


0

관심이 있다면, 드림 캐스트는 "레이싱 빔"렌더링 모드를 가졌으며, 상대적으로 적은 양의 메모리를 프레임 버퍼 픽셀 (예 : 64 스캔 라인)에 전용 할 수 있었고 32 행을 차례로 렌더링하여 디스플레이 업데이트. 그러나 이것은 메모리 저장에만 사용되었습니다. 누구든지 디스플레이의 후반부에 "수정 된"지오메트리를 생성 한 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.