Mengapa beberapa game menggunakan pola dithering alih-alih alpha tradisional untuk transparansi?

24

Baru-baru ini, saya telah melihat beberapa game 3D (misalnya:) GTA IVuntuk menggunakan semacam dithering yang dipesan untuk mensimulasikan transparansi / alpha.

Poligon tidak transparan seperti biasanya, tetapi menghasilkan tekstur dithering yang secara bertahap beralih dari kiri ke kanan untuk mensimulasikan transparansi:

masukkan deskripsi gambar di sini

Efeknya tidak menyenangkan tetapi agak mengejutkan untuk melihat pada awalnya (vs campuran alpha tradisional)

Kecuali untuk efek estetika visual yang dihasilkannya, adakah alasan mengapa beberapa game melakukan ini (kinerja lebih baik, menghemat bandwidth atau hal lain yang tidak saya pikirkan)?

Saya telah mencari di web tetapi tidak menemukan apa pun tentang teknik ini.

tigrou
sumber
Mungkin itu hanya datang dengan gaya seni pixel.
MichaelHouse
@ Byte56 Pixel art style? GTA IV? Hah?
Nathan Reed
@NathanReed Heh, bukan di GTA IV. OP menyebutkan melihatnya baru-baru ini di game.
MichaelHouse
1
Saya menemukan teknik ini lebih menyenangkan daripada alpha blending ketika memudar objek 3D yang terlalu dekat dengan pesawat dekat.
Andreas

Jawaban:

27

Ini adalah pendekatan yang cukup umum untuk transparansi dalam game yang menggunakan naungan yang ditangguhkan. Transparansi yang tepat sama sekali tidak bekerja dengan baik dengan naungan yang ditangguhkan, karena hanya satu data permukaan (kedalaman, vektor normal, warna, dll.) Yang dapat disimpan pada setiap piksel, dan transparansi yang tepat melibatkan beberapa permukaan yang tumpang tindih pada satu piksel, masing-masing membutuhkan independen penerangan.

Ada beberapa cara mesin game dapat menangani ini:

  • Gunakan naungan ke depan (mungkin dengan model pencahayaan yang dikurangi) untuk permukaan transparan, dan naungan yang ditangguhkan untuk permukaan buram. Permukaan transparan harus ditarik secara terpisah dengan penyortiran back-to-front.
  • Gunakan dithering, yang lebih umum dikenal dengan penetapan atau transparansi layar-pintu, yang bekerja dengan shading yang ditangguhkan karena hanya memberikan satu permukaan per piksel. Ini bekerja sangat baik untuk transisi LOD, karena mereka biasanya selesai dalam jumlah waktu yang tetap, membatasi berapa lama penetapan terlihat. Ini tidak bekerja dengan baik untuk, katakanlah, jendela kaca pada bangunan.
  • Dimungkinkan juga untuk menggunakan stippling tetapi kemudian menerapkan blur pasca-proses yang menggabungkan kembali piksel yang ditetapkan, memberikan perkiraan transparansi yang tepat. Volition melakukan ini di Saints Row the Third (dan mungkin beberapa game lain juga), dengan nama " pencahayaan yang disimpulkan ". Ini bisa terlihat cukup bagus, tetapi blur pasca-proses mahal.
  • Dan tentu saja, ada semua metode transparansi yang tidak tergantung pesanan di luar sana, meskipun saya tidak tahu ada game yang menggunakannya. Mereka hanya untuk demo teknologi sejauh ini.

Kita juga dapat menggunakan kombinasi dari pendekatan ini, misalnya naungan ke depan untuk jendela kaca dan penetapan untuk transisi LOD.

Perlu juga dicatat bahwa beberapa permainan menggunakan penetapan untuk bayangan lembut. Ini adalah tradeoff kinerja; bayangan yang lebih bagus membutuhkan lebih banyak sampel tekstur dalam pixel shader, yang membutuhkan waktu lebih lama, tetapi Anda bisa mendapatkan hasil yang tampak oke dengan menggunakan lebih sedikit sampel dan mengimbangi posisi mereka secara acak. Offset acak menghasilkan efek penetapan.

Nathan Reed
sumber
saya tidak tahu tentang teknik shading yang ditangguhkan (dijelaskan di sini: en.wikipedia.org/wiki/Deferred_shading ). Mereka juga berbicara tentang kemungkinan masalah alfa. Masuk akal sekarang. Terima kasih atas jawabannya
tigrou
0

Ini adalah trade-off kinerja yang sederhana. Alpha blending membutuhkan pembacaan dari buffer warna saat ini, sedangkan dithering semacam ini hanya untuk penulisan (atau tentu saja hanya buang saja).

Dimungkinkan untuk mencampur teknik ini dengan multisampling, yang kemudian disebut alpha to coverage .

sam hocevar
sumber
"Pertukaran kinerja" macam apa yang Anda bicarakan? Early-Z dimatikan jika Anda menggunakan discard di shader Anda. Memadukan dilakukan pada perangkat keras dan cepat.
Tara
Sebenarnya saya baru saja mengujinya di mesin saya pada adegan yang tepat pada resolusi tinggi: Mengaktifkan vs menonaktifkan pencampuran untuk SEMUA geometri menghasilkan tidak ada perbedaan kinerja sama sekali. Jawaban Nathan Reed benar, karena dithering biasanya digunakan dalam rendering yang ditangguhkan.
Tara