
Waktu yang berubah secara dinamis, efek cuaca yang bervariasi, dan banyak bioma yang dapat dieksplorasi membuat pelacakan sinar waktu nyata menjadi pilihan tepat untuk The Riftbreaker
Tur singkat penelusuran sinar
Dunia The Riftbreaker benar-benar dinamis dan dapat dirusak. Hampir semua objek yang ada di lingkungan dapat dipengaruhi oleh pemain. Vegetasi bisa dibengkokkan, dibakar, dan dilarutkan. Ribuan makhluk dapat mengerumuni pemain dan memenuhi layar sepenuhnya. Jenis permainan ini membutuhkan pendekatan khusus untuk menampilkan bayangan yang sepenuhnya dinamis.
Sebelumnya, untuk menghasilkan bayangan di mesin Schmetterling 2.0, mereka menggunakan metode peta bayangan waktu nyata (tanpa peta bayangan yang telah dihitung sebelumnya sendiri). Solusi ini adalah yang paling optimal karena geometri pemandangan yang sepenuhnya dinamis. Namun, tidak mungkin menggunakan peta cahaya yang telah dihitung sebelumnya, karena tidak sesuai dengan geometri ini. Itulah mengapa peta bayangan dinamis adalah satu-satunya solusi nyata untuk waktu yang lama. Meskipun banyak digunakan di seluruh industri, mereka memiliki sejumlah keterbatasan.

Fragmen pertempuran bos. Terlampir pada bos adalah titik cahaya bayangan yang menambahkan kesetiaan visual ke tempat kejadian.
GPU generasi terbaru cukup kuat untuk melakukan kalkulasi pelacakan sinar waktu nyata. Dan kemunculan kartu grafis baru memungkinkan studio untuk akhirnya memperkenalkan bayangan yang ditelusuri dengan sinar yang memberikan hasil yang lebih unggul dibandingkan metode pemetaan bayangan tradisional.
Prinsip dasar dari shadow tracing adalah kita tidak melihat pemandangan dari sudut pandang sumber cahaya dan tidak mencari semua jenis kasta bayangan, seperti yang dilakukan pada peta bayangan. Penelusuran sinar memungkinkan Anda untuk hanya menembakkan sinar ke sumber cahaya. Jika sinar menabrak penghalang, maka tidak akan ada penerangan langsung darinya. Jika mencapai sumber cahaya, tidak ada bayangan yang ditambahkan. Algoritma ini cukup sederhana, tetapi memberikan hasil yang sangat baik dan menawarkan solusi untuk masalah rendering bayangan yang umum. Namun, sangat pilih-pilih tentang kinerja GPU.

Setiap elemen geometri dinamis pemandangan dapat menghasilkan bayangan. Tantangannya adalah membuat bayangan ini tampak seakurat mungkin dengan tetap mempertahankan performa.
Menambahkan teknologi rendering yang benar-benar baru ke mesin game Anda sendiri bukanlah tugas yang mudah. Dalam kasus The Riftbreaker, kolaborasi studio dengan AMD sangat membantu. Mereka menyediakan pustaka GPUOpen RT Shadows milik yang berisi pelacakan sinar dan pengurangan kebisingan yang membersihkan hasil lulus pelacakan sinar. Namun, sebelum menggunakan pustaka ini, saya harus mengembangkan perender DirectX 12 untuk mesin gim. Alasannya adalah DirectX Raytracing API (alias DXR) yang diperkenalkan dalam standar DirectX 12 Ultimate. API ini memungkinkan kapabilitas shader dan penelusuran sinar perangkat keras baru dari GPU modern.

The Riftbreaker . .
Keuntungan lain bekerja dengan AMD adalah kode sumber terbuka dari solusi mereka. Hal ini memungkinkan penerapan teknologi yang kompatibel dengan platform game terbaru di pasar, termasuk konsol generasi berikutnya. Perlu juga dicatat bahwa kompatibilitas platform memengaruhi pemilihan dan rendering API. Dua opsi dipertimbangkan: Vulkan dan DirectX 12. Meskipun Vulkan menyertakan pelacakan sinar, API ini tidak tersedia di Xbox atau PlayStation, dan pada tulisan ini, hanya Nvidia yang mendukungnya di PC. Pindah ke DirectX 12 menghadirkan dukungan pelacakan sinar asli ke Xbox dan PC Windows, memungkinkan Anda menggunakan perangkat keras dari pabrikan mana pun.

Saat kondisi cuaca berubah, naungan parsial juga berubah. Dalam contoh ini, Anda dapat melihat bagaimana bayangan menjadi lebih lembut saat hujan dan lebih tajam saat sinar matahari muncul.
Manfaat penerapan bayangan yang dilacak sinar dapat bervariasi bergantung pada skenario penerapan. Dalam kasus The Riftbreaker, fitur yang paling penting adalah:
- Resolusi bayangan "tak terbatas": kualitas bayangan tidak bergantung pada jarak dari subjek ke kamera, tidak seperti metode pemetaan bayangan tradisional. Setiap piksel pada layar memiliki bayangan yang dihitung secara individual, menghasilkan bayangan yang lebih akurat dan stabil tanpa artefak yang berkedip-kedip.
- shifting penumbra: Bayangan yang dilacak sinar secara dinamis mensimulasikan situasi seperti transisi dari langit mendung saat hujan ke tengah hari yang cerah.
- biaya rendah untuk menghitung sumber cahaya tambahan yang menghasilkan bayangan. Dengan penerapan bayangan yang ditelusuri sinar saat ini di The Riftbreaker, Anda dapat menghitung hingga 4 lampu bayangan pada saat yang sama tanpa memengaruhi kinerja secara signifikan. Biaya penambahan lampu tambahan dalam kasus peta bayangan jauh lebih tinggi.
Semua manfaat ini datang dengan mengorbankan kerugian kinerja yang signifikan. Bahkan dengan GPU terbaru yang mendukung penelusuran sinar yang dipercepat perangkat keras, nilai FPS dengan semua efek penelusuran sinar yang diaktifkan dapat mencapai setengahnya saat membandingkan pemandangan yang sama tanpa penelusuran.
Menerapkan bayangan yang dilacak sinar
Menambahkan bayangan yang dilacak sinar ke pemandangan adalah proses kompleks yang menghasilkan peta piksel terang dan tidak terang yang sangat detail. Selama lintasan pertama penelusuran sinar, penting untuk mengembalikan posisi semua piksel di area yang terlihat di layar dan mengarahkan sinar dari piksel ini ke semua sumber cahaya yang mempengaruhinya. Koordinat ini diambil dari buffer kedalaman. Jika pancaran sinar mencapai sumber cahaya, maka permukaannya langsung diterangi. Jika balok menabrak rintangan di jalurnya, permukaannya akan teduh. Selain itu, untuk mengoptimalkan proses, semua sinar permukaan dipancarkan dengan peta normal menghadap jauh dari sumber cahaya. Lintasan selanjutnya menentukan jenis shader yang akan diterapkan pada persimpangan sinar dan permukaan. DXR API menggunakan shader untuk pemrosesan,berdasarkan hasil penelusuran sinar, dan memeriksanya dengan tabel shader yang ada.

Contoh Scene Game dengan Ray Tracing - Soft Shadows dan Ambient
Occlusion diaktifkan Kartu grafis seri Radeon RX 6000 yang digunakan untuk mengembangkan ray tracing di The Riftbreaker sangat kuat dan mampu meluncurkan jutaan sinar per detik. Namun, lebih banyak informasi diperlukan untuk mendapatkan gambaran yang akurat tentang bagaimana cahaya akan berperilaku di dunia game. Dalam kasus rendering offline, ini biasanya berarti mentransmisikan ribuan sinar ke segala arah untuk setiap piksel. Tidak ada perangkat keras modern yang mampu melakukan penghitungan ini secara real time, apalagi melakukannya 60 kali per detik. Jadi, Anda perlu membuat peta bayangan yang akurat menggunakan data yang tidak lengkap.

. , .
Kurangnya data yang akurat menimbulkan banyak masalah dan dapat menyebabkan kualitas visual pemandangan yang menurun. Meskipun kita akan memiliki sebagian besar informasi yang diperlukan untuk merender objek, detail seperti jalur, tepi, dan bayangan lembut akan kabur dan menyatu satu sama lain. Jumlah balok yang terbatas per bingkai menghasilkan bayangan yang bising. Kemudian pustaka GPU open source lainnya ikut bermain - AMD FidelityFX Denoiser. Menghilangkan kebisingan adalah proses kompleks yang menjadi mungkin berkat meluasnya penggunaan metode temporal yang menganalisis bingkai sebelumnya dan menggabungkannya menjadi bingkai baru. AMD Noise Reduction memungkinkan Anda dengan cepat menentukan rata-rata data yang tersedia dan properti apa yang akan diterapkan pada piksel tertentu untuk mendapatkan gambar yang tajam tanpa kompromi yang terlihat.

Adegan yang sama setelah menghilangkan noise

, . โโ .
Tentu saja, implementasi bayangan yang dilacak sinar ternyata bukan tugas yang mudah karena harus dibatasi dengan menggunakan beberapa perpustakaan yang sudah jadi. Riftbreaker menghadirkan tantangan uniknya sendiri yang membutuhkan solusi khusus.
Masalah pertama seperti itu adalah banyaknya jumlah objek dinamis yang ada di dunia game. Dalam The Riftbreaker, Anda berperan sebagai ilmuwan yang menjelajahi planet ekstrasurya yang dihuni oleh banyak spesies asing flora dan fauna. Pemain sekarang dan kemudian diserang oleh gerombolan ribuan makhluk asing. Masing-masing harus membuat bayangannya sendiri. Dikombinasikan dengan sistem vegetasi dinamis yang merespons angin, gelombang kejut, dan gaya bengkok yang diterapkan oleh objek lain, ini telah menjadi masalah pengoptimalan utama.

Ribuan entitas berinteraksi satu sama lain secara real time
Masalah utama disebabkan oleh cara kerangka percepatan atas untuk ray tracing memproses data. Struktur ini menyimpan informasi tentang objek dalam pemandangan yang digunakan selama ray tracing pass. Data ini hanya dapat disimpan sebagai struktur percepatan tingkat rendah yang telah dipanggang sebelumnya yang berisi informasi tentang simpul objek. Ini bukan masalah jika menyangkut bebatuan atau bangunan, tetapi semua unit dengan kerangka, animasi yang digabungkan secara dinamis, dan vegetasi dinamis benar-benar tidak sejalan dengan asumsi data yang dibuat sebelumnya.

ยซยป . , . : , .
Untuk menyediakan kerangka akselerasi dengan semua data yang diperlukan, beberapa langkah serius harus diambil. Setiap objek dinamis dalam pemandangan secara individual dimasukkan ke dalam model statis yang benar-benar baru yang dapat diproses selama ray tracing pass. Untuk menjaga akurasi, proses ini harus diulangi setiap frame. Kompleksitas tugas ini ditambah dengan fakta bahwa The Riftbreaker memiliki sistem cuaca yang dinamis. Karena itu, mungkin saja sumber cahaya berada pada suatu sudut, yang karenanya objek melemparkan bayangan ke dalam bingkai, tanpa terlihat secara langsung. Ini berarti bahwa selama proses memanggang, Anda tidak hanya perlu memperhitungkan objek yang terlihat di bagian layar, tetapi juga di luarnya.

Seluruh frame akselerasi dirender hanya dalam satu frame render
. Proses menyiapkan struktur akselerasi sangat rumit dalam hal komputasi CPU dan dapat dengan mudah menjadi penghambat bagi seluruh renderer. Schmetterling Engine 2.0 mengurangi beban pada unit pemrosesan pusat dengan secara intensif memparalelkan semua proses yang diperlukan untuk menyiapkan pemandangan untuk penelusuran sinar. Dengan mendistribusikan operasi antara CPU dan GPU, dimungkinkan untuk menemukan daya komputasi yang diperlukan untuk melakukan semua operasi ini di setiap frame. Dalam kasus skenario pengujian yang mencakup sekitar 6.000 makhluk yang menyerang basis pemain, waktu rendering dapat dikurangi dari 60 md menjadi 17 md dengan memparalelkan tugas yang bergantung pada CPU (menggunakan CPU AMD Ryzen 9 3900X dan versi pra-rilis Radeon 6800XT).

The Riftbreaker. , , , .
-
Tantangan unik lainnya yang harus dipecahkan oleh para insinyur ketika menerapkan teknik penelusuran sinar di The Riftbreaker ternyata terkait dengan sistem vegetasi, meskipun dengan cara yang sedikit berbeda. Tekstur yang digunakan oleh dedaunan biasanya sudah diuji alfa dan seringkali memiliki area transparan. Namun, bagi raikast tidak masalah. Begitu sinar menyentuh piksel transparan pada tekstur, ia mengembalikan "hit" normal. Hal ini tidak serta merta berarti pixel yang kita hasilkan sinar harus tertutup bayangan, karena jika texel yang kita pukul transparan maka sinar tersebut harus terus bergerak menuju sumber cahaya. Ada banyak tekstur seperti itu dalam game, jadi perlu untuk menemukan solusi untuk masalah ini dan menambahkan dukungan untuk pengujian alfa ke shader AnyHit.

- . , .
Pendekatan studio adalah menggunakan solusi yang digunakan dalam teknik rendering tradisional. Saat mengenai permukaan, kita mendapatkan koordinat barycentric dari segitiga di titik perpotongan. Koordinat ini tidak cukup untuk menentukan piksel tekstur mana yang terkena sinar, dan Anda hanya dapat mengetahui posisi titik persimpangan dalam segitiga. Namun, pada tahap ini, kita bisa menentukan puncak mana yang harus dipertimbangkan. Setiap simpul dari segitiga memiliki satu set koordinat UVW yang ditetapkan oleh desainer grafis selama pembuatan tekstur. Mengetahui segitiga mana kita jatuh, koordinat perpotongan di dalam segitiga ini dan bagian tekstur mana yang harus menutupinya, kita dapat melakukan uji alpha.

Poligon di bawah tekstur vegetasi tidak tembus cahaya. Saya harus memperkenalkan metode tambahan untuk memeriksa apakah mereka cocok dengan tekstur yang benar-benar buram.
Namun, sebelum semua hal di atas terjadi, struktur percepatan perlu menyampaikan informasi tentang tekstur dan posisinya. Untuk ini, kami memerlukan tabel shader, yang pada dasarnya adalah bank data untuk GPU. Ini mencantumkan tekstur yang digunakan dalam adegan dan nilai yang ditugaskan padanya dalam buffer indeks dan simpul. Dengan tabel shader, Anda bisa dengan cepat mendapatkan semua model dan data tekstur yang Anda butuhkan untuk menyelesaikan langkah bayangan selanjutnya.

Karena The Riftbreaker berlangsung di dunia asing yang tidak berpenghuni, ada banyak hewan liar yang bisa ditemukan di sini
Jika hasilnya buram, data bayangan diterapkan dan proses untuk sinar tersebut berakhir. Dalam kasus hasil buram, pengujian alfa dilakukan. Seperti yang telah disebutkan, ketika sebuah sinar memotong suatu permukaan, dari sini Anda bisa mendapatkan koordinat barycentric dari titik dalam segitiga yang bertabrakan. Mengetahui koordinat ini dan mengacu pada buffer indeks, Anda bisa mendapatkan indeks dari simpul dari segitiga yang ditentukan. Ini mengambil koordinat UVW. Dengan data yang disediakan oleh buffer indeks, Anda sekarang dapat menemukan informasi dalam buffer simpul tentang di mana simpul-simpul ini berada pada tekstur. Hanya setelah semua tindakan ini kita mendapatkan jawaban atas pertanyaan apakah sinar bertabrakan dengan permukaan buram atau transparan. Jika nilai alpha di titik potong berada di bawah ambang transparansi, sinar terus memotong pemandangan.

Dengan cara ini kami mendapatkan hasil yang tepat di setiap frame. Klik gambar untuk tampilan lebih besar.
Pengujian alfa meningkatkan biaya material dalam hal penghitungan bayangan yang dilacak sinar dibandingkan metode tradisional, jadi yang terbaik adalah menghindarinya jika memungkinkan. Dalam skenario hutan, biaya pengiriman balok semacam itu sekitar 20% lebih tinggi daripada biaya balok yang mengenai objek buram. Untuk mengurangi jumlah sinar yang mengenai permukaan transparan, diperlukan optimasi dengan membatasi luas permukaan semua objek transparan. Tampilan kamera di The Riftbreaker bersifat isometrik, jadi jumlah poligon yang terlihat pada saat yang sama secara alami terbatas, dan kami dapat dengan mudah meningkatkan waktu rendering poligon pada sebagian besar objek tanpa memengaruhi performa GPU.
Kesimpulan
Penggunaan ray tracing oleh Riftbreaker hanya menguntungkan. Dunia permainan telah menjadi lebih bisa dipercaya, yang berkontribusi pada perendaman yang lebih baik. Detail kecil yang ditambahkan dengan penelusuran sinar pasti membantu meningkatkan persepsi. Melihat komet cerah di langit yang menghasilkan bayangan pada objek dinamis di bumi adalah pemandangan yang benar-benar indah. Hari-hari mendung, pada gilirannya, sambut pemain dengan bayangan lembut dan palet warna yang lebih kalem. Riftbreaker pasti akan mengambil tempat yang memang layak di jajaran game generasi berikutnya.

Riftbreaker akan hadir di PC dan konsol pada tahun 2021.