Mengapa shadow mapping standar?

41

Meskipun saya seorang programmer dengan perdagangan, saya hampir tidak menyentuh pengembangan game sama sekali. Saya sudah memiliki pertanyaan ini selama beberapa waktu, dan sekarang setelah saya melihat perkembangan game, saya pikir ini waktu yang tepat untuk bertanya.

Mengapa pemetaan bayangan tampaknya menjadi cara eksklusif yang digunakan game untuk membuat bayangan? Terus terang, itu terlihat mengerikan. Bahkan gim-gim modern dengan pengaturan bayangan maksimal telah membuat bayangan block-y yang bergerigi sangat mengganggu.

Doom 3, dibuat 11 tahun yang lalu menggunakan volume bayangan yang terlihat jauh lebih baik daripada implementasi peta bayangan yang pernah saya lihat, yang termasuk game AAA yang dirilis pada minggu yang sama pertanyaan ini sedang diposting. Mod pihak ketiga untuk Doom 3 bahkan melunakkan tepi bayangan, membuatnya lebih mengesankan secara visual.

Apakah ada beberapa masalah teknis atau batasan dengan menerapkan hal-hal seperti volume bayangan? Apakah peta bayangan begitu mudah diimplementasikan sehingga pengembang bahkan tidak mempertimbangkan hal lain?

Satu-satunya informasi yang saya dapat temukan pada subjek adalah bahwa poligon yang membentuk volume bisa sangat besar, menjadi lebih menuntut. Mungkin volume bayangan memiliki persyaratan sistem yang jauh lebih tinggi, tetapi jika itu masalahnya bagaimana mereka bisa menggunakannya pada tahun 2004?

Pertanyaan ini tidak spesifik untuk pemetaan bayangan vs volume bayangan, Mereka hanya 2 yang pernah saya lihat digunakan dalam produk penuh dan saya hanya belum dapat menemukan banyak informasi tentang teknik lain.

gnoblin
sumber
3
Hanya sebuah catatan - Doom 3 sangat intensif kinerja untuk hari itu, dan masih berombak bahkan pada beberapa sistem modern (dan saya tidak berbicara tentang GPU terintegrasi, meskipun itu tidak benar-benar tidak pantas di sini; tentu saja, kemungkinan besar karena usianya, tapi ...). Dan saya telah melihatnya berjalan di banyak komputer di mana bayangan dan pencahayaan tidak berfungsi . Jelas, ada banyak kerumitan mendapatkan bayangan tepat dalam gim, dan Doom 3 adalah contoh yang bagus tentang betapa sulitnya grafik realistik dibandingkan kebanyakan konfigurasi komputer.
Luaan
1
Doom 3 adalah tahun-tahun sebelumnya ketika pengembangan dimulai (setidaknya diberi pilihan API grafis). Itu memiliki beberapa backend untuk menangani generasi perangkat keras pra-Shader Model 2.0 dan itu berarti sekitar 1/4 mesin hampir tidak portabel (bahkan pra-tanggal bahkan GLSL) dan 3/4 sisanya adalah codepath untuk ekstensi perangkat keras NV dan ATI kuno. yang tidak relevan pada saat game dikirimkan. Pilihannya untuk volume stensil-bayangan mungkin adalah yang paling tidak menjadi masalah.
Andon M. Coleman

Jawaban:

48

Pemetaan bayangan dan bayangan stensil (volume bayangan) jelas merupakan dua besar, seperti yang telah Anda sebutkan, jadi saya akan tetap membandingkan keduanya. Dan karena Anda telah menunjukkan kekurangan yang paling jelas dari pemetaan bayangan dan keuntungan dari bayangan stensil, saya akan melakukan yang sebaliknya.

Kekurangan bayangan stensil

  1. Bayangan cocok dengan bentuk mesh casting. Ini sangat membatasi , dan mungkin alasan teknis terbesar untuk tidak menggunakan bayangan stensil . Daun pohon, semak-semak, pagar kawat, robekan kain, dan elemen permainan pengecoran bayangan umum lainnya menggunakan transparansi alfa untuk menentukan bentuk objek. Tetapi karena bayangan stensil cocok dengan mesh dan tidak sepenuhnya bagian tekstur yang terlihat pada mesh, mereka tidak dapat digunakan untuk objek seperti itu. Sebagai contoh, sekelompok daun di pohon biasanya akan menjadi tekstur sekelompok daun di quad. Bayangan stensil hanya akan dapat menunjukkan bayangan quad itu sendiri (dan itu akan memiliki masalah dengan itu karena quad bukan jala yang tertutup, tetapi ini adalah detail kecil yang akan saya lewati untuk jawaban ini, karena umumnya dapat dikerjakan).
  2. Tidak dapat melakukan bayangan lembut yang akurat. Anda telah menunjukkan bahwa Doom 3 telah dimodifikasi untuk memungkinkan bayangan lembut. Versi ini di sini , setidaknya, menggunakan pemetaan bayangan untuk bayangan lembut. Saya juga melihat teknik layar-ruang untuk melembutkan bayangan keras, tetapi mereka rentan terhadap segala macam masalah.
  3. Tidak dapat melakukan bayangan pada objek transparan. Ada solusi untuk ini - rendering bayangan untuk objek transparan dalam lintasan yang terpisah dan mengkomposisikannya setelahnya. Tapi selain workarounds sulit, sifat bayangan stensil adalah seperti yang setiap pixel di layar adalah baik dalam bayangan atau tidak. Ini juga alasan tidak ada bayangan lembut seperti yang disebutkan sebelumnya.
  4. Implementasi bayangan stensil yang umumnya lebih disukai dan paling kuat, sering disebut "Carmack's Reverse", sebenarnya dipatenkan, seperti yang ditunjukkan Angew dalam komentar. (Tidak dipatenkan oleh Carmack; ia harus mengatasinya untuk versi open source Doom 3)

Mendukung pemetaan bayangan

Selain tanpa batasan yang saya daftarkan secara khusus untuk bayangan stensil, ada beberapa keuntungan ekstra untuk pemetaan bayangan:

  1. Skalabilitas. Sementara pemetaan bayangan tidak murah atau sempurna ( ed: tetapi bayangan stensil juga tidak murah ), relatif mudah untuk memperdagangkan kesetiaan untuk kinerja dengan mengubah resolusi peta bayangan atau mengubah pemfilteran untuk bayangan. Ini membuatnya relatif mudah untuk menyempurnakan kualitas bayangan / kinerja untuk sistem yang berbeda. Seperti yang telah Anda tunjukkan, ini seringkali tidak sempurna, tetapi banyak dari ini akan tergantung pada persepsi pemain, dan resolusi yang mereka mainkan (resolusi layar yang lebih tinggi akan membuatnya lebih mudah untuk melihat balok warna bayangan pemetaan). Beberapa game AAA (seperti Fracture ) melakukan pekerjaan luar biasa dengan pemetaan bayangan hanya dengan memilih filter yang tepat dan menyetel tombol yang tepat, sementara banyak yang hanya menamparnya di sana dan mengatakan "cukup baik".
  2. Cookie (bayangan bertekstur): Tambahkan tekstur lampu sorot, atau kaca patri, dan Anda dapat meniru semua jenis sumber cahaya dunia nyata. Ini bisa dilakukan dengan bayangan stensil, juga, tetapi melibatkan hampir semua pengaturan pemetaan bayangan (matriks proyeksi yang sama yang digunakan untuk memproyeksikan tekstur cahaya pada objek adalah yang digunakan untuk pemetaan bayangan).
  3. Bayangan transparan: Sebagian besar permainan tidak berusaha banyak dengan ini, tetapi bayangan transparan dimungkinkan dengan pemetaan bayangan. Maksud saya bukan hanya potongan alfa seperti pohon dan pagar seperti yang saya sebutkan sebelumnya, tapi maksud saya sebagian bayangan transparan, seperti dari asap dan debu.

Tidak satu pun dari daftar itu yang lengkap.

Jadi, sementara pengamatan Anda tentang pemetaan bayangan dan bayangan stensil benar, kekurangan bayangan stensil adalah penghalang bagi banyak efek yang diinginkan, dan pemetaan bayangan memiliki beberapa keunggulannya sendiri.

Jibb Smart
sumber
1
Ahhh, saya gagal untuk mempertimbangkan sebagian besar dari hal-hal ini dan tekstur transparan seperti daun adalah masalah yang cukup besar. Terima kasih atas jawabannya!
gnoblin
1
Tidak masalah :) Beberapa di antaranya mudah terlewatkan!
Jibb Smart
8
Saya akan mengatakan bahwa satu masalah tambahan dengan volume bayangan adalah bahwa pass-pass tidak suka kamera berada di dalam shadow, dan depth-fail dipatenkan.
Reinstate Monica
Poin bagus, Angew. Saya telah menambahkan bahwa untuk alasan tidak menggunakan bayangan stensil, dan mengklarifikasi alasan utama untuk tidak menggunakan bayangan stensil sebagai " alasan teknis terbesar " untuk tidak menggunakannya, karena masalah paten bisa dengan sendirinya menjadi show-stopper.
Jibb Smart