Ketika GPU Anda menampilkan bingkai baru di layar, itu mentransfer gambar melalui kabel HDMI (atau apa pun) dalam proses yang disebut "scanout". Pixel dikirim dalam urutan linier, biasanya dari kiri ke kanan dan dari atas ke bawah. Proses ini diatur waktunya sehingga dibutuhkan sebagian besar durasi interval penyegaran untuk melakukan ini. Misalnya, pada 60Hz, satu frame adalah ~ 17 ms. Setiap pemindaian akan memakan waktu sekitar 15-16 ms, dengan 1-2 ms vblank di antaranya (nilai yang tepat bervariasi sesuai dengan mode tampilan dan video).
Secara tradisional, rendering adalah buffer ganda, yang berarti ada dua buffer yang tersimpan dalam memori GPU: satu yang saat ini sedang dipindai ("buffer depan"), dan yang sedang diterjemahkan ke ("buffer belakang"). Setiap frame, keduanya ditukar. GPU tidak pernah merender ke buffer yang sama yang sedang dipindai, yang mencegah artefak karena berpotensi melihat bagian-bagian dari frame yang tidak lengkap. Namun, efek samping dari ini adalah peningkatan latensi, karena setiap frame dapat duduk di dalam buffer selama beberapa ms sebelum mulai dipindai.
VR sangat sensitif terhadap latensi, jadi ini tidak diinginkan. Pendekatan alternatif adalah merender langsung ke buffer depan, tetapi mengatur waktu dengan sangat hati-hati sehingga Anda telah memberikan setiap baris gambar sesaat sebelum pemindaian tiba di sana. Itu disebut "scanline racing" atau "racing the beam" ("balok" yang mengingatkan kembali ke masa CRT dahulu kala). Ini lebih atau kurang mengharuskan Anda membuat gambar dalam urutan scanline, yaitu urutan yang sama bahwa piksel dipindai. Secara harfiah tidak harus di-render satu baris pada satu waktu — itu dapat di-render dalam strip-strip tipis beberapa piksel, tetapi itu harus dilakukan secara berurutan, karena Anda tidak dapat kembali dan mengedit piksel yang sudah telah dipindai.
Ada banyak kelemahan dari pendekatan ini; ia memiliki persyaratan kinerja yang sangat ketat, harus diatur dengan sangat hati-hati terhadap vsync, dan sangat mempersulit proses rendering. Tetapi pada prinsipnya itu dapat mencukur milidetik dari latensi Anda, yang mengapa orang-orang VR tertarik padanya.
Yang hebat adalah kita akhirnya bisa memprediksi akurasi raster tepat garis pemindaian tanpa akses ke kueri per-pemindaian:
https://www.youtube.com/watch?v=OZ7Loh830Ec
Saya telah datang dengan formula mikrodetik-akurat sebagai offset VSYNC, untuk memprediksi posisi garis air mata. Tearline selama VSYNC OFF selalu tepat raster, sehingga Anda dapat menjauhkan mereka dari visibilitas selama strip-level "rendering buffer depan simulasi" melalui pertukaran buffer VSYNC OFF yang berulang.
Perhatikan utas forum - ada beberapa kode sumber terbuka yang terus ditambahkan - https://forums.blurbusters.com/viewtopic.php?f=10&p=32002
sumber
Jika itu menarik, Dreamcast memiliki mode rendering "racing the beam", di mana ia dapat mendedikasikan sebagian kecil dari memori untuk framebuffer pixel (misalnya 64 garis pemindaian) dan itu akan membuat baris 32 pada gilirannya, disinkronkan untuk pembaruan tampilan. Namun ini, hanya digunakan untuk menghemat memori. Saya ragu ada yang membuat "dimodifikasi" geometri untuk bagian terakhir dari tampilan.
sumber