Q2VKPT: Quake II yang sepenuhnya ditulis ulang dengan pencahayaan realistis


Q2VKPT adalah game pertama yang dapat dimainkan dengan pelacakan sinar penuh, secara efektif mensimulasikan pencahayaan dinamis sepenuhnya secara real time menggunakan teknologi modern yang sama yang digunakan dalam industri film (lihat panduan praktis Disney untuk melacak jejak ).

Rilis terbaru dari model GPU dengan fitur raytracing telah membuka kemungkinan yang sama sekali baru untuk masa depan grafis gaming, namun, penggunaan raytracing yang tepat bukanlah tugas yang sepele. Sementara beberapa pengembang game mulai mengeksplorasi kemungkinan rendering bayangan dan pantulan, Q2VKPT adalah proyek pertama yang mengimplementasikan solusi umum yang efektif untuk semua jenis transfer cahaya: pencahayaan langsung, difus dan pantulan (lihat bagian "Media"). Dalam industri film, penyatuan tersebut telah menyebabkan peningkatan yang signifikan dalam fleksibilitas dan produktivitas . Ada kemungkinan bahwa perkembangan teknologi dalam game seperti itu menjanjikan peningkatan serupa dalam akurasi visual dan realisme grafik selama beberapa tahun ke depan. Proyek ini harus berfungsi sebagai konfirmasi konsep untuk bidang penelitian grafis komputer dan industri game; selain itu, ini memungkinkan penggemar game untuk melihat potensi masa depan grafis game. Selain menggunakan penelusuran sinar akselerasi perangkat keras, Q2VKPT terutama memberikan efisiensi berkat teknik pemfilteran gambar adaptif , yang secara cerdas melacak perubahan iluminasi pemandangan untuk menggunakan kembali sebanyak mungkin informasi dari perhitungan sebelumnya.

Tentang proyek


Proyek ini dirilis sebagai sumber terbuka di GitHub . Ini mengintegrasikan pelacak sinar Vulkan kami ke klien Q2PRO . Proyek ini muncul karena kebutuhan untuk penelitian grafis komputer dari konten tes yang berjalan cepat. Hal ini dimotivasi oleh hasil menarik pertama dari penyaji jalur yang ditulis pada tahun 2016 .

Ceritanya


VKPT dan Q2VKPT dibuat sebagai proyek hobi oleh Christoph Schied untuk menguji hasil penelitian grafis komputer dalam game ini. Saat ini, proyek tersebut mencakup 12 ribu baris kode dan sepenuhnya menggantikan kode grafis asli Quake II. Awalnya, prototipe ditulis dalam OpenGL dengan partisipasi Johannes Hanika ( penelusuran ray eksperimental, shader, koreksi GL / Vulkan), Addis Diettebrand (hierarki pencahayaan, visualisasi debug), Tobias Zirr (sampling pencahayaan, situs web, teks informasi) dan Florian Rybold (hierarki cakupan awal). Bantuan tambahan diberikan oleh Stefan Bergmann, Emanuel Schrade, Alice Jung dan Christoph Peters ( sedikit berisik ).

Bahan yang bisa diunduh



Video




Pemotretan yang gagal dalam pengembangan: video dengan gangguan 1 , video dengan gangguan 2 .

Tangkapan layar


Kami menyarankan Anda untuk menonton video atau memainkan permainan sendiri, karena pencahayaan yang dinamis sepenuhnya terasa lebih baik dalam gerakan.

Pencahayaan global yang sepenuhnya dinamis dibuat menggunakan ray tracing. Bayangan yang diciptakan oleh penelusuran sinar, pantulan glossy dan satu tahap pantulan pencahayaan tidak langsung ditambahkan










Output dari pelacak jalur (kiri) dan filter reduksi kebisingan yang diterapkan (kanan)

Perbandingan tangkapan layar


Teknologi


Q2VKPT diimplementasikan pada Vulkan API untuk dapat menggunakan fitur penelusuran ray perangkat keras baru yang muncul tahun lalu. Berkat mereka, gim ini bisa mendekati 60 FPS (2560x1440, RTX2080Ti) dengan penelusuran sinar penuh dan naungan dinamis dengan model pencahayaan global realistis yang dihitung secara real time. Penggunaan lintasan jejak untuk pencahayaan yang sepenuhnya dinamis memungkinkan Anda untuk sangat meningkatkan detail bayangan adegan permainan, secara alami menciptakan interaksi yang kompleks antara bayangan tajam dan halus, bahan mengkilap dan refleksi yang prospektif benar. Selain itu, cahaya dapat merambat secara alami di mana-mana, menghubungkan adegan seperti yang mereka lakukan di dunia nyata. Solusi tradisional dengan pencahayaan yang dihitung sebelumnya atau perkiraan raster kasar secara real time tidak akan pernah dapat mencapai detail seperti itu dengan resolusi yang sebanding, karena seluruh jumlah informasi tentang pencahayaan akan melebihi batas memori.

Rincian teknis


Q2VKPT menggunakan banyak teknik untuk mengadaptasi metode komputasi mahal untuk game yang sebelumnya hanya digunakan dalam industri film. Inti mereka adalah filter waktu adaptif, yang secara cerdas menggunakan kembali hasil perhitungan kerangka sebelumnya (ini adalah proyek penelitian Christoph sebelumnya ). Filter ini digunakan di atas temporal anti-aliasing yang sudah tersebar luas dan memperluas proses pelacakan perubahan sementara dari ruang gambar sederhana ke ruang dimensi tinggi jalur perambatan cahaya. Pelacakan perubahan dalam jalur diperlukan karena penelusuran jalur adalah algoritma acak, yang merupakan kekuatan dan kelemahannya: pelacakan jalur dapat menangani semua bentuk perambatan cahaya dengan cara yang digeneralisasi, tetapi mungkin butuh waktu lama untuk hasilnya menjadi andal, terlalu lama untuk satu bingkai dalam game waktu nyata. Solusi sederhana dalam ruang gambar (mis. Temporal anti-aliasing) tidak dapat menangani tingkat ketidakpastian ini.

Seiring waktu penyaringan, kami mengeksplorasi beberapa teknik untuk menemukan sumber cahaya yang memengaruhi setiap permukaan dalam gim. Memilih sumber cahaya yang tepat sangat penting untuk kualitas gambar, karena jika Anda membuat pilihan yang salah, kami akan mendapatkan hasil yang sangat tidak dapat diandalkan dari pelacak jalur, yang akan membuat filter waktu menghapus semua detail indah yang seharusnya dibuat oleh pelacak jalur. Dalam prototipe asli, hierarki penuh sumber cahaya yang digunakan dalam industri film digunakan: membagi sumber cahaya sesuai dengan hierarki, kita dapat secara bersamaan menghitung pengaruh beberapa sumber, yang memungkinkan kita dengan cepat mengecualikan sumber yang jauh dan lemah, serta sumber yang berada di arah yang salah. Namun, ternyata perhitungan seperti itu sulit untuk dibuat akurat, dan biaya komputasi untuk melintasi hierarki sulit dikendalikan. Karena Quake II asli menggunakan banyak ruang yang berpotensi terlihat (Potential-Visible-Set) untuk memotong bagian pemandangan yang tidak terlihat, kami memutuskan untuk mengekstraksi dari kumpulan daftar sumber yang berpotensi terlihat ini untuk setiap bagian adegan. Dalam versi saat ini, kami telah menerapkan perhitungan yang akurat sebagian dari pengaruh masing-masing sumber dalam daftar, secara acak memilih subset yang sesuai dari daftar ini di setiap frame. Oleh karena itu, renderer dengan cepat menemukan semua sumber cahaya, dan kita dapat melakukan semua perhitungan efek pencahayaan untuk periode waktu yang terkontrol dan konstan.

Tanya Jawab


Mengapa game saya โ€œcrashโ€?


Kami melakukan proyek ini di waktu luang kami, jadi kami tidak memiliki kekuatan yang cukup untuk kontrol kualitas yang cermat. Silakan kirim laporan bug ke pelacak masalah repositori GitHub kami!

Mengapa tidak ada partikel? Saya perlu lalat dan bunga api dari railgun!


Sayangnya, kami tidak punya cukup waktu untuk menambahkan sumber pencahayaan ke railgun. Sedangkan untuk partikel lain, keputusan yang kami buat untuk melakukan ray tracing hanya sedikit mempersulit proses rendering partikel. Jika kita menemukan waktu, maka kita akan memperbaikinya di masa depan!

Saat ini, permainan terlihat sangat realistis! Mengapa menggunakan penelusuran jalur?


Game modern telah sangat memperluas kemampuan tradisional, berdasarkan grafis raster. Namun, peningkatan ini berbayar: mesin rendering game modern telah menjadi serangkaian teknik yang sangat ditargetkan dengan rumit. Untuk mencapai gambar yang dapat diterima tanpa artefak, pencahayaan, bayangan dan refleksi harus dihitung secara individual dalam banyak resolusi dan skala. Jejak jejak dan teknik rendering Monte Carlo lainnya memungkinkan Anda menemukan jalan keluar dari sistem yang selalu rumit ini. Bahkan, mereka sudah menyelesaikan masalah ini di industri film . Prototipe kami adalah jawaban pertama untuk pertanyaan tentang bagaimana mencapai ini di industri video game.

Quake II adalah game kuno! Jika teknologi ini memiliki masa depan, hari ini ia akan bekerja dengan frekuensi 6000 FPS!


Ya, Quake II adalah permainan yang cukup lama dengan kompleksitas geometri yang agak rendah, tetapi faktor pembatas utama untuk lacak jalur bukanlah ray tracing atau kompleksitas geometri. Bahkan, prototipe saat ini dapat melacak lebih banyak sinar tanpa pengurangan yang nyata dalam laju bingkai. Biaya komputasi dari teknik yang digunakan dalam prototipe Q2VKPT terutama tergantung pada jumlah perhitungan hamburan cahaya (tidak langsung) dan jumlah sumber cahaya. Quake II awalnya memiliki banyak sumber cahaya, dan dalam hal ini masih merupakan game yang cukup modern. Selain itu, jumlah acara hamburan cahaya tidak tergantung pada kompleksitas adegan. Oleh karena itu, kita dapat mengasumsikan bahwa teknik yang digunakan oleh kami cocok untuk game yang lebih modern.

Kenapa Harus Gempa II?


Karena sumber-sumber Quake II diposting di domain publik, dan game itu sendiri memiliki sejarah modding yang panjang. Ini adalah kotak pasir yang sangat baik untuk menguji penelitian ilmiah di dunia nyata. Secara khusus, gim ini memiliki gim yang aktif dan kompetitif, yang menetapkan tuntutan tinggi pada kinerja dan keandalan teknik yang diberikan. Dan akhirnya, Quake II dalam arti tertentu masih tetap merupakan permainan yang cukup modern, karena pada awalnya dirilis dengan desain pencahayaan yang kompleks dan artistik.

Bagaimana saya bisa menggunakan Q2VKPT sebagai patokan?


Buka konsol dengan menekan tombol "~". Dalam versi demo Quake 2, Anda dapat menggunakan perintah โ€œtimedemo 1; demo q2demo1 ", dalam versi lengkap - perintah" timedemo 1; demo demo1 ". Profiler bawaan diluncurkan dengan perintah vkpt_profiler 1. Ini memberikan perincian tentang pengaturan waktu GPU untuk langkah-langkah perenderan individual.

Apa perbedaan lintasan jejak dengan lacak ray?


Path tracing adalah algoritma yang elegan yang dapat mensimulasikan banyak cara kompleks yang menyebar cahaya dan mencerai-beraikan dalam adegan virtual. Simulasi pencahayaan berbasis fisika menyediakan rendering berkualitas tinggi. Path tracing menggunakan ray tracing untuk menentukan visibilitas antara peristiwa hamburan. Namun, ray tracing hanyalah operasi primitif yang dapat digunakan untuk banyak tujuan. Oleh karena itu, penelusuran sinar saja tidak mampu menciptakan gambar yang realistis. Untuk melakukan ini, Anda dapat menggunakan algoritme rambat cahaya seperti penelusuran jalur. Namun, terlepas dari kenyataan bahwa itu elegan dan sangat kuat, penelusuran jalur naif sangat mahal dan memakan waktu untuk membuat gambar yang stabil. Proyek kami menggunakan filter adaptif cerdas yang menggunakan kembali jumlah informasi sebanyak mungkin dalam beberapa bingkai dan piksel untuk membuat gambar yang andal dan stabil.

Path tracing dan ray tracing - masa depan grafis game?


Pengenalan GPU dengan fitur ray tracing baru-baru ini telah membuka kemungkinan yang sama sekali baru untuk masa depan grafik game, tetapi diperlukan pendekatan nontrivial untuk menggunakan ray tracing dengan benar. Tujuan dari proyek kami adalah untuk mencari tahu apa yang tidak ada untuk membuat jalur langsung ke masa depan grafik ray-tracing. Meskipun beberapa masalah telah diselesaikan dalam penelitian ilmiah, banyak masalah nyata tetap tidak terlihat sampai Anda mulai menerapkan renderer penuh dari game. Di masa mendatang, kami berencana mempelajari beberapa masalah ini, misalnya, pengambilan sampel pencahayaan yang lebih baik, penyaringan yang lebih baik, dan struktur perender perangkat lunak yang lebih konsisten. Agar perubahan ini menyebar luas, diperlukan solusi yang baik untuk tugas penyaji baru dan tidak biasa berdasarkan penelusuran dan lintasan ray.

Akankah melacak jalur akhirnya menyelesaikan semua masalah grafis?


Penelusuran jalur dan metode serupa dengan elegan menyelesaikan banyak tugas rumit grafik game. Namun, sifat probabilistik mereka menambah sejumlah tugas baru, solusi yang diperlukan untuk membuat gambar berkualitas tinggi yang jelas (tanpa suara). Metode penyaringan dalam prototipe Q2VKPT adalah langkah pertama untuk metode terpadu yang andal yang memungkinkan Anda untuk menerapkan pendekatan pencarian kasar sepenuhnya bersatu dalam rendering menggunakan penelusuran jalur. Dalam beberapa bulan dan tahun mendatang, kami berharap dan berharap untuk melihat studi lain ke arah ini!

Apakah Q2VKPT menggunakan peta pencahayaan dari game asli?


Mesin Quake 2 asli menggunakan peta cahaya yang sudah dihitung sebelumnya yang mengandung bayangan lembut dan pencahayaan tidak langsung yang menyebar. Q2VKPT sepenuhnya menggantikan pencahayaan statis dengan simulasi sepenuhnya dinamis yang menyatukan sumber pencahayaan statis dan dinamis.

Berapa banyak sinar yang dihasilkan oleh Q2VKPT per pixel?


Jumlah sinar yang dipancarkan tergantung pada permukaan pertama yang terlihat. Pada permukaan buram, Q2VKPT menggunakan satu balok untuk setiap piksel untuk menemukan permukaan yang terlihat langsung dan tidak langsung. Selain itu, untuk kedua permukaan, Q2VKPT memancarkan satu balok ke sumber cahaya yang dipilih secara acak. Karena itu, Q2VKPT memancarkan setidaknya 4 sinar untuk setiap piksel.

Apakah Q2VKPT menggunakan rasterisasi?


Secara tradisional, rasterizer digunakan untuk menemukan permukaan yang terlihat dari kamera dalam permainan. Dalam Q2VKPT, rendering sepenuhnya dilakukan oleh ray tracing, sehingga rasterizer tidak digunakan (dengan pengecualian elemen antarmuka pengguna dua dimensi).

Source: https://habr.com/ru/post/id436754/


All Articles