Dalam game AAA modern dengan lingkungan terbuka dan banyak konten statis (misal: crysis), bagaimana pemusnahan oklusi dilakukan?

19

Dua ide yang ada dalam pikiran saya:

1) Adegan dirender ke buffer tak terlihat, menggunakan resolusi rendah dan model jumlah poligon rendah (atau bahkan hanya menggunakan volume yang terikat seperti kubus atau bola). Buffer kemudian diperiksa untuk mengetahui apa yang terlihat atau tidak. Sebelum rendering adegan resolusi rendah, beberapa culling frustum dapat diterapkan, untuk sudah menghapus objek sebanyak mungkin.

2) Suatu alat dijalankan pada peta statis dan akan melakukan pelacakan ray yang rumit (dan karenanya lambat) untuk mengetahui beberapa posisi 3d pada peta apa yang terlihat dan apa yang tidak. Semua informasi itu kemudian disimpan dengan cara yang efisien yang dapat digunakan oleh pengguna pada saat runtime (mis: octree). Solusi ini hanya akan bekerja untuk jerat statis (mis: bangunan) bukan objek bergerak.

tigrou
sumber
3
Pertanyaan "Bagaimana permainan <X> melakukan ini" secara eksplisit di luar topik sesuai FAQ . Mungkin edit pertanyaan ini untuk bertanya bagaimana Anda bisa melakukan pemusnahan oklusi, daripada bagaimana orang lain melakukannya? (Juga, memberikan jawaban Anda sendiri di tubuh pertanyaan membuatnya merasa seperti Anda meminta diskusi atau daftar, daripada jawaban )
Trevor Powell

Jawaban:

13

Jawaban Jovan luar biasa, tetapi hanya ingin menambahkan bahwa kadang-kadang ada dukungan perangkat keras untuk mengajukan pertanyaan, "Apakah geometri ini benar-benar menghasilkan piksel?" (ide Anda # 1) Ini disebut permintaan oklusi - ini adalah artikel Permata GPU yang bagus tentang mereka di sini

Ini sangat mirip dengan ide Anda # 1, kecuali Anda tidak memerlukan buffer tidak terlihat, dan bisa lebih efisien atau lebih sederhana daripada memeriksa buffer. Artikel yang ditautkan melakukan pekerjaan luar biasa secara mendalam dengan cara kerja permintaan oklusi perangkat keras.

Unreal Engine memanfaatkan kueri penyumbatan perangkat keras pada platform yang mendukungnya, di samping teknik lain seperti melihat frustasi pemusnahan dan pra-perhitungan apa geometri statis terhambat.

Bryan Phelps
sumber
Permintaan oklusi perangkat keras sebenarnya sedikit lebih umum daripada "kadang-kadang" hari ini - dengan kemungkinan pengecualian beberapa GPU seluler, mereka dapat dianggap ada di mana-mana.
Maximus Minimus
bukankah mereka sangat lambat?
Quonux
12

1) Adegan dirender ke buffer tak terlihat, menggunakan resolusi rendah dan model jumlah poligon rendah (atau bahkan hanya menggunakan volume yang terikat seperti kubus atau bola). Buffer kemudian diperiksa untuk mengetahui apa yang terlihat atau tidak. Sebelum menampilkan adegan resolusi rendah, beberapa pemusnahan frustasi dapat diterapkan, untuk sudah menghapus objek sebanyak mungkin.

Teknik ini digunakan oleh Killzone, dan dirinci dalam presentasi mereka Culling Praktis Penutupan pada PS3 . Mereka juga menggunakan portal untuk area indoor.

Satu hal yang perlu diingat tentang peta luar ruang yang besar adalah bahwa penyederhanaan mesh sama pentingnya dengan penyumbatan oklusi, sehingga beberapa variasi bidang ketinggian dengan geometri clipmapping sering digunakan. Ini adalah kertas bagus yang mencakup pemusnahan juga. GPU Permata 2 memiliki implementasinya .

Jovan
sumber
5

Setidaknya dua game Quake pertama menggunakan strategi 2; Saya tidak tahu apakah mesin idTech masih menggunakannya. Dunia yang dapat dijangkau dibagi menjadi ruang cembung yang diorganisasikan dalam struktur data pohon ("partisi ruang biner"), dan untuk setiap node dalam pohon terdapat vektor sedikit yang menunjukkan node lain mana yang terlihat dari simpul tersebut ("set potensial potensial").

Russell Borogove
sumber
1
Jika Anda akan membawa Quake, Anda sebaiknya membawa teknologi rendering Thief;) - nothings.org/gamedev/thief_rendering.html
Jovan