Temui modder yang meretas teknologi peningkatan baru AMD ke Cyberpunk 2077
Awal pekan ini, tersiar kabar tentang seorang modder yang meretas teknologi peningkatan temporal FSR 2.0 AMD ke Cyberpunk 2077, memungkinkan pengguna kartu grafis non-RTX kesempatan untuk bermain game pada frame-rate yang lebih tinggi dengan kualitas visual yang jauh lebih baik daripada dengan peningkatan FSR 1.0 . Itu sangat besar untuk pemilik GPU AMD, dan mod bahkan bekerja dengan baik di Steam Deck.
Kami menghubungi pembuat mod, PotatoOfDoom1337 yang bernama agung, untuk mengetahui dengan tepat cara kerjanya – dan apakah itu berarti FSR 2.0 akan segera tersedia dalam banyak game yang ada. Berikut wawancara, diedit ringan untuk kejelasan. Menikmati!
Apa latar belakang Anda dalam pemrograman dan modding game? Di NexusMods, sepertinya Anda baru membuat mod sejak April tahun lalu?
KentangDoom: Saya belajar ilmu komputer, selalu tertarik pada aspek teknis video game dan terpesona ketika saya belajar tentang proyek-proyek seperti Warnai ulang, K . khusus atau DXVK. Saya melihat pemrograman sebagai hobi favorit saya dan juga suka rekayasa balik dan banyak bermain-main dengan kode. Saya membuat mod Cyberpunk 2077 pertama saya karena CDPR memperbaiki bug yang sangat menyenangkan di dalam game. Ini sangat mengganggu saya sehingga saya mengunduh alat pengembangan dan mengimplementasikan kembali bug itu sendiri. Proses pembuatan mod ini membuat saya ketagihan, saya belajar lebih banyak tentang permainan dari waktu ke waktu dan mulai membuat mod yang lebih kompleks.
Apa yang memotivasi Anda untuk mencoba meretas FSR 2.0 ke Cyberpunk 2077?
KentangDoom: Terutama GTX 1080 saya yang sudah tua, sedikit kecemburuan terhadap pengguna RTX karena teknologi DLSS eksklusif mereka, dan rasa ingin tahu tentang cara kerja solusi peningkatan sementara secara umum. Juga, FSR 2.0 dan DLSS digambarkan sangat mirip, jadi saya hanya ingin melihat apakah itu mungkin.
Bagaimana Anda mengembangkan mod?
KentangDoom: Saya awalnya memulai mod beberapa minggu yang lalu untuk mengantisipasi rilis open source FSR 2.0. Langkah pertama adalah membuat game berbicara dengan .dll kustom saya dan memberi tahu game bahwa itu mendukung DLSS dan melaporkan resolusi DLSS yang tersedia ke game dengan mengimplementasikan antarmuka yang diperlukan. Lalu saya menulis shader kecil yang hanya menampilkan gambar merah kosong. Tujuan saya adalah menggunakan ini sebagai dasar untuk memverifikasi bahwa bagian DirectX dari kode saya berfungsi dengan benar. Kemudian saya hanya menunggu rilis open source. Setelah AMD merilis kode sumber, saya segera mengganti kode pengujian saya dengan FSR 2.0. Saya berharap untuk mengerjakannya selama beberapa hari, tetapi terkejut karena saya hanya butuh beberapa jam untuk mengintegrasikannya. Saya menggunakan debugger seperti x64dbg dan perangkat lunak rekayasa balik seperti IDA dan Ghidra untuk menemukan spesifikasi perilaku DLSS dalam kode game. Juga, untuk men-debug buffer, RenderDoc sangat membantu.
Harap aktifkan JavaScript untuk menggunakan alat perbandingan kami.
Beginilah tampilan mod beraksi di Cyberpunk 2077 dan Dying Light 2, dibandingkan dengan DLSS, FSR 1.0, dan 4K asli.
Apakah ada kejutan dalam hal hal-hal yang lebih sulit atau lebih mudah untuk dicapai?
KentangDoom: Buffer input DLSS dan FSR utama adalah sama. Saya pada dasarnya hanya menyalin integrasi FSR dari contoh AMD, mengatur nilai FoV/Depth, meluncurkan game dan segera mendapatkan gambar yang cukup bagus. Hal terburuk adalah kekhasan di Cyberpunk di mana permainan tidak akan mengatur ulang struktur DirectX khusus (ComputeRootSignature) setelah menjalankan DLSS. Ini tidak begitu penting untuk DLSS Nvidia karena menggunakan CUDA, tetapi sayangnya FSR menggunakan shader komputasi DirectX biasa, yang merusak permainan. Jadi saya harus menemukan cara untuk memulihkan struktur itu setelah menjalankan FSR.
Terkait implementasi FSR 2.0 CP2077, apa yang berjalan baik saat ini dan apa yang perlu diperbaiki?
KentangDoom: Ghosting dan tekstur animasi adalah masalah terbesar saat ini. Baik DLSS dan FSR menggunakan topeng terpisah untuk memberikan petunjuk algoritme tentang apakah akan menggunakan kembali materi temporal lama atau membuangnya, tetapi mereka tampaknya tidak kompatibel dan saya perlu membuat shader yang menerjemahkan topeng DLSS menjadi topeng FSR.
Masker DLSS dan FSR… apakah mirip dengan topeng Photoshop?
KentangDoom: Ya, pada dasarnya seperti itu. Anda dapat membayangkannya sebagai gambar skala abu-abu dengan nilai mulai dari 0,0 hingga 1,0 dan temporal upscaler memproyeksikan ulang bingkai lama tergantung pada nilai tersebut. Itu dokumentasi FSR masuk ke lebih detail tentang itu.
Berikut adalah contoh visualnya. Saya melemparkan granat api ke jalan, dan seperti yang Anda lihat tidak ada apa pun di vektor gerak atau buffer kedalaman. Itu karena baik tekstur api 2D, maupun partikel percikan tidak memiliki representasi 3D dalam game. Untuk memastikan bahwa percikan kecil tidak menyebabkan jejak yang tidak sedap dipandang, mereka ditutupi di InputBiasColorMask sehingga algoritme proyeksi ulang mengabaikan piksel ini dan tidak memproyeksikan ulang apa pun di lokasi itu.
Apakah FSR 2.0 dan DLSS memiliki persyaratan yang sama dalam hal input apa yang mereka butuhkan?
KentangDoom: Ya, jika tidak, mod ini tidak akan mungkin. Kedua integrasi membutuhkan warna, vektor gerak, dan buffer kedalaman sebagai input. Selain itu, mereka menggunakan topeng yang saya sebutkan sebelumnya. Mereka sangat penting untuk hal-hal yang tidak memiliki vektor gerak, seperti partikel atau tekstur animasi seperti asap dan layar komputer dalam permainan dan topeng yang diterapkan secara salah adalah alasan utama munculnya bayangan dalam permainan. Juga, FSR perlu mengetahui FOV dan bidang dekat dan jauh dari buffer kedalaman. DLSS tidak memerlukan informasi tambahan itu (saya kira itu mengetahuinya melalui algoritma ML terintegrasi).
Dengan apa yang Anda ketahui sekarang, seberapa mudahkah mengembangkan solusi serupa untuk game DLSS lainnya?
KentangDoom: Ya, saya pikir begitu. Saya masih belum selesai dengan yang satu ini tetapi jika game lain serupa, ini seharusnya tidak memakan waktu lebih lama dari beberapa hari per game. Saya sudah melakukan beberapa tes awal dengan Death Stranding dan hasil pertama terlihat sangat bagus.
Misalnya, dapatkah FSR 2.0 ditambahkan ke Control, sebuah game yang terkenal berjalan sangat buruk pada GPU AMD, bahkan dengan RT dinonaktifkan?
KentangDoom: Ya, saya pikir begitu. Kontrol telah diperbarui ke DLSS 2.0 yang berarti antarmuka DLSS yang digunakan untuk berkomunikasi dengan game adalah sama atau setidaknya sangat mirip dengan Cyberpunk. Ini adalah bagian terpenting.
Mengingat minat publik yang besar pada mod, apa rencana Anda ke depan? Apakah Anda terbuka untuk pengembang lain yang bergabung dengan proyek untuk meningkatkan hasil, atau menerapkan mod serupa untuk game lain?
KentangDoom: Saya benar-benar tidak mengharapkan minat sebanyak ini pada mod saya, dan jika saya tahu itu, saya akan menyiapkan sedikit lebih banyak ketika saya menekan tombol terbitkan Kamis lalu. Saya ingin menyelesaikan Cyberpunk terlebih dahulu (jika pengembang sebenarnya tidak lebih cepat dari saya XD) dan kemudian beralih ke game DLSS lainnya. Dan ya, tentu saja saya ingin pengembang lain bergabung dengan saya dan membantu saya mengeluarkan proyek ini dari tahap pembuktian konsep lebih cepat dan menjadi sesuatu yang dapat digunakan orang. Saya dengar sudah ada yang mau porting mod saya ke Red Dead Redemption 2.
Apakah mungkin untuk membuat pengganti DLSS drop-in yang berfungsi di berbagai game (‘dlss2fsr’, seperti yang disarankan oleh pengguna Github) atau apakah Anda melihatnya lebih dari serangkaian mod yang masing-masing disesuaikan dengan game tertentu?
KentangDoom: Hanya dengan beberapa kompromi. Dimungkinkan untuk membuat semacam mod yang mendapatkan nilai FoV dan Depth dari file ini sederhana. Mod ini dapat bekerja untuk hampir semua game DLSS, tetapi kualitas gambarnya mungkin tidak sebagus yang seharusnya. Maksud saya bahkan Nvidia mengoptimalkan DLSS untuk game tertentu. Misalnya, versi pertama DLSS memiliki ghosting yang mengerikan di Cyberpunk, sementara pembaruan selanjutnya untuk DLSS memperbaiki situasi. Saya tidak dapat berbicara untuk game lain, tetapi misalnya Cyberpunk secara tidak sengaja mengirimkan buffer ID objek ke DLSS (yang merupakan buffer yang memberikan nilai warna tunggal untuk setiap objek dalam adegan). DLSS tidak memerlukan buffer ini dan tidak dapat melakukan apa pun dengan informasi ini, tetapi ini memungkinkan saya untuk meningkatkan anti-ghosting (terutama saat mengemudi) secara luar biasa. Juga, bug ComputeRootSignature yang saya sebutkan sebelumnya unik untuk Cyberpunk dan membuat versi mod FSR ini tidak kompatibel dengan game lain. Setiap game memiliki beberapa kebiasaan unik atau bahkan bug yang membuatnya penting untuk mengoptimalkan setiap game untuk mendapatkan pengalaman terbaik. Saya jelas tidak dapat melakukan hal seperti ini untuk setiap game, tetapi saya pikir jika ada semacam kerangka kerja DLSS2FSR, mungkin pengembang lain dengan beberapa pengalaman pemrograman dapat dengan mudah mengintegrasikan dan mengoptimalkan FSR untuk game DLSS lainnya.
Adakah hal lain yang ingin Anda bagikan tentang proses pembuatan mod, atau yang ingin Anda ketahui?
KentangDoom: Saya pikir jawaban saya di atas harus mencakup semua tentang mod untuk saat ini. Mod ini baru berumur beberapa hari dan sudah diterima dengan sangat baik. Saya yakin kita akan melihat banyak perkembangan menarik dalam beberapa minggu mendatang. Tetap disini untuk lebih.
Hal yang menarik memang! Sejak wawancara ini berlangsung, kontributor lain dengan ID mnnx berhasil diadaptasi mod untuk Dying Light 2, dan saya berharap untuk melihat lebih banyak game yang didukung selama beberapa minggu ke depan jika semuanya berjalan dengan baik. Terima kasih kepada PotatoOfDoom atas waktunya membuat mod dan berbicara dengan kami!
Jika Anda tertarik untuk mencoba sendiri modnya, Anda bisa temukan di NexusMods. Instalasi cukup mudah – ganti beberapa file di direktori CP2077 Anda, dan buat perubahan registri. Anda juga dapat mengikuti perkembangan mod di Repositori GitHub PotatoOfDoom.