Pembuatan bingkai Resident Evil 2

gambar

Catatan umum


Semua hasil diperoleh pada mesin yang agak lama (i7 3770 + GTX 770), game berjalan di DirectX 11 dengan kualitas sedang. Untuk analisis, RenderDoc dan Nsight digunakan.

Permainan ini berjalan pada mesin Re Engine, yang menjadi pewaris MT Framework - mesin dari generasi sebelumnya Capcom R&D. Selain RE2, digunakan di DMC5 dan RE7: Biohazard.

Saya tidak dapat menemukan materi di Mesin RE di Internet, jadi semua yang ada di artikel ini didasarkan pada tebakan (saya harap, dibenarkan). Saya memeriksa sekitar 90% dari struktur frame dan memberikan gambaran umum tentang algoritma. Penelitian lebih lanjut membutuhkan lebih banyak pengalaman dan waktu untuk membalikkan rekayasa shader.

Struktur bingkai


Simulasi partikel / fluida


Antara lain, gim ini menghasilkan tekstur gelombang (contoh diambil dari bingkai lain).

partikel sim 0

partikel sim 0

Gelombang digunakan untuk membuat air, yang tidak ada dalam bingkai yang dianalisis.

Beberapa hasil disalin ke buffer staging, dan ini menunjukkan bahwa hasilnya dapat digunakan dalam CPU.

Perhitungan daftar sumber pencahayaan


Bagian ini menghasilkan daftar sumber cahaya yang terlihat, memeriksa lokasi kerucut pencahayaan relatif terhadap piramida visibilitas. Hasilnya adalah daftar sumber cahaya yang terlihat dan tabel 3D tertentu yang membandingkan posisi di ruang menonton dengan sumber cahaya yang sesuai.

Daftar instance yang terlihat untuk setiap sumber cahaya, yang nantinya digunakan saat memperbarui peta bayangan, juga dihitung.

Titik putih


Bagian ini membangun histogram pencahayaan berdasarkan gambar HDR sebelumnya dan tabel pengukuran. Kemudian, berdasarkan data ini, ia menentukan titik putih.

meja pengukuran

sebelumnya

Definisi objek yang tumpang tindih


Kotak pembatas dari objek yang tumpang tindih diperiksa untuk persimpangan dengan piramida visibilitas dalam shader komputasi dan buffer argumen tidak langsung diisi.

Jatuhkan Geometri yang Tumpang tindih


Objek yang tumpang tindih diterjemahkan ke dalam buffer kedalaman resolusi rendah, dan kemudian kotak pembatas diperiksa untuk masuknya kedalaman ke buffer ini.


Sampel 0-3

Buffer kedalaman yang digunakan multisampled empat kali. Mungkin untuk mengkompensasi resolusi rendah.

oklusi pemusnahan 0

Sepertinya kotak terikat berorientasi pada pandangan.

oklusi pemusnahan 0

Contoh pengujian geometri yang tumpang tindih (dari frame lain). Pixel yang lulus tes (hijau) menulis bendera (misalnya 1) dalam buffer visibilitas untuk setiap instance.

store_raw RWDrawIndirectArguments.x, v1.x, l(1) 

Akumulasi argumen tidak langsung


Hampir setiap objek geometri di ruang dunia dirender menggunakan panggilan tidak langsung. Profiler Nsight menunjukkan panggilan ke NvAPI_D3D11_MultiDrawIndexedInstancedIndirect. Untuk informasi tentang penggunaannya, lihat [ 1 ] dan [ 2 ]. RenderDoc memblokir ekstensi MultiDraw, jadi di EventBrowser mereka diperluas ke banyak DrawIndexedInstancedIndirect dan beberapa di antaranya kosong.

Tujuan dari pass ini adalah untuk mengumpulkan topeng visibilitas dari pass sebelumnya dan menghasilkan buffer argumen.

Bagian kedalaman


Tidak ada yang luar biasa. Subset adegan dengan geometri dasar yang tumpang tindih.

prepass mendalam

Geometri + stiker pass G-buffer



Output data:

  • RT0 - r11g11b10 memancarkan
  • RT1 - rgba8 albedo.rgb + metallness.a
  • RT2 - r10g10b10a2 normal.rg + roughness.b + misc.a
  • RT3 - r16g16b16a16 baked_ao.x + velocity.yz + sss.a


Model yang dirender menggunakan oklusi ambien terpanggang dari model resolusi tinggi.

Perhitungan HiZ


Hiz gif

Shader komputasi multi-pass mendefinisikan setiap level dalam hierarki kedalaman.

Ao


Pemrosesan SSAO atau HBAO + tergantung pada parameter yang dipilih oleh pemain. Dalam kasus saya, SSAO.

AO dihitung berdasarkan HiZ dari pass sebelumnya.


Global Specular + Diffuse


Menggunakan beberapa algoritma non-trivial, probe cahaya, peta kubik, dan AO digabungkan menjadi peta global yang tersebar dan spekulatif.

Gid

Gid

Contoh kartu kubik dari tempat kejadian.

Gid

Komponen cahaya global yang menyebar.

Gis

Komponen pencahayaan global specular.

Pembaruan Peta Shadow


Peta bayangan yang dibuat untuk setiap sumber cahaya diperbarui untuk sumber-sumber yang dipengaruhi oleh objek dinamis. Setiap peta bayangan ditempatkan dalam berbagai tekstur.


Specular Lokal + Diffuse + SSS


Kemudian, kontribusi masing-masing sumber cahaya untuk komponen specular dan difus dihitung.

Gid

Diffus + SSS. Efek SSS tidak terlihat dalam bingkai ini.

Gis

Komponen Specular.

Integrasi pencahayaan



Luminositas specular / Diffuse / komponen pencahayaan lokal terintegrasi dengan albedo.

Menambahkan Kaca Bening



Setelah menambahkan semua sumber cahaya, kaca transparan diberikan.

Perhitungan pencahayaan volumetrik / kabut / asap



Bahkan, itu hanya sekumpulan sprite.

Gunakan pencahayaan volumetrik / kabut / asap



Bagian ini menghitung gambar buram untuk meningkatkan pencahayaan kabut.


Jika Anda mengganti topeng kabut asli dengan pola kotak-kotak.

Gis

Hasil dari perikop ini.

TAA dengan gambar HDR sebelumnya


Gis

TTA hanya sihir.

Motion blur


Gis

Berdasarkan peta kecepatan, peta blur bantu dihitung.

Gis

Pemrosesan pos


Gis

Pass ini pertama-tama memperkecil gambar.

Gis

Dan kemudian itu berlaku filter mekar, koreksi nada, distorsi dan aberasi kromatik.

Kesimpulan


Mesin secara aktif menggunakan shaders komputasi + render tidak langsung. Semua jerat dan tekstur berkualitas tinggi.

Gim ini menggunakan rendering yang ditangguhkan dengan TAA / FXAA dan kaca sebagai pasca pemrosesan. Anda dapat membaca lebih lanjut tentang trik dengan rendering yang ditangguhkan di sini [sebuah pos berdasarkan artikel di Habrรฉ]. Banyak tekstur dikompresi oleh BC7. Secara umum, teknik yang digunakan mirip dengan yang dijelaskan dalam [ 4 ].

Bonus


Kontribusi SSS


Gis

Saya harus hati-hati mencari bingkai yang cocok untuk menunjukkan dampak SSS.

Bagaimana monster dengan tentakel ditampilkan


Bentuk akhir cowok G virus

Monster itu terbagi menjadi banyak bagian.

Nyali



Gim ini memiliki banyak tekstur berdarah untuk berbagai detail.

Level mip untuk tekstur tidak hanya difilter secara linear. Di setiap level, penajaman ditingkatkan. Selain itu, beberapa tekstur sudah memiliki sorotan specular (tidak terlalu jelas bagaimana ini mempengaruhi penampilan akhir mereka).

Geometri


Bentuk akhir cowok G virus

Geometri memiliki topologi yang baik.

HBAO


Bentuk akhir cowok G virus

HBAO memberikan kualitas yang jauh lebih baik daripada SSAO.

Merokok



Asap mempertimbangkan sumber cahaya kerucut.


Pesawat nyata digunakan untuk membuat asap.

Referensi


[1] Kostas Anagnostou: Eksperimen dalam pemusnahan oklusi berbasis GPU

[2] Daniel Rรกkos: Multi-Draw-Indirect ada di sini

[3] Blog Adrian Correger

[4] Alien: Isolasi

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


All Articles