Когда ваш графический процессор отображает новый кадр на экране, он передает изображение через кабель HDMI (или любой другой вид) в процессе, называемом «сканирование». Пиксели отправляются в линейном порядке, обычно слева направо и сверху вниз. Процесс рассчитан так, что для этого требуется большая часть интервала обновления. Например, при 60 Гц один кадр составляет ~ 17 мс. Каждое сканирование займет, вероятно, около 15-16 мс с интервалом 1-2 мс между точками (точные значения варьируются в зависимости от режима отображения и видео).
Традиционно рендеринг выполняется с двойной буферизацией, что означает, что в памяти GPU хранятся два буфера: один, который в настоящее время сканируется («передний буфер»), и тот, который визуализируется («обратный буфер»). Каждый кадр, два поменялись местами. Графический процессор никогда не рендерится в тот же буфер, который сканируется, что предотвращает появление артефактов из-за потенциальной возможности увидеть части неполного кадра. Однако побочным эффектом этого является увеличение задержки, поскольку каждый кадр может сидеть в буфере в течение нескольких мс, прежде чем он начнет сканироваться.
VR очень чувствителен к задержке, поэтому это нежелательно. Альтернативный подход заключается в рендеринге непосредственно в передний буфер, но очень тщательно продумывайте время, чтобы каждая строка изображения была отрисована незадолго до того, как отсканированное изображение попадет туда. Это называется «гонка по скенлайну» или «гонка по лучу» («луч», напоминающий о CRT-днях прошлого). Это более или менее требует, чтобы вы отображали изображение в порядке строки сканирования, то есть в том же порядке, в котором пиксели сканируются. Его не нужно буквально отображать по одной строке за раз - его можно отображать тонкими полосками высотой в несколько пикселей, но это нужно делать по порядку, поскольку вы не можете вернуться назад и редактировать уже существующие пиксели. был отсканирован.
У этого подхода много недостатков; он имеет очень строгие требования к производительности, должен быть очень тщательно рассчитан по отношению к vsync, и это значительно усложняет процесс рендеринга. Но в принципе это может сократить ваши задержки на миллисекунды, и именно поэтому в этом заинтересованы люди VR.