Saya ingin mencapai di Unity efek tembus seperti yang ada dalam contoh ini:
Dalam skenario spesifik saya ada beberapa persyaratan:
- Sprite menggunakan alpha blending, dan sprite memiliki area transparan.
- Ada 2 jenis elemen yang menyumbat karakter. Yang satu harus menciptakan efek siluet, dan yang lain harus berperilaku seperti biasa.
Untuk elemen oklusi yang membuat siluet saya mengaktifkan ZWrite, dan menonaktifkannya untuk elemen yang tidak.
Untuk karakter saya mencoba mengatur antrian shader menjadi transparan + 1, dan menambahkan pass ini:
Pass
{
ZTest Greater
Lighting Off
Color [_Color]
}
Dan efeknya bekerja sebagian:
Siluet digambar di seluruh karakter, bahkan bagian-bagian yang transparan. Bagian transparan seharusnya tidak membuat siluet.
Siluet dibuat ketika karakter berada di belakang sprite, bahkan jika bagian sprite itu transparan. Berada di belakang bagian transparan sprite seharusnya tidak menciptakan siluet.
Karakter muncul di depan elemen-elemen lainnya, bahkan jika ada di belakangnya. Saya kira ini karena mengatur antrian ke Transparan +1. Tetapi jika saya membiarkannya Transparan, karakternya digambar dalam urutan yang benar, tetapi siluetnya tidak pernah terlihat.
Saya mencoba mengikuti tips yang diberikan seseorang kepada saya, tetapi saya tidak dapat membuatnya berfungsi:
1) Biarkan pass yang membuat sprite seperti apa adanya.
2) Tambahkan pass yang menulis ke buffer-z, tetapi memiliki shader yang menggunakan clip () untuk membuang piksel berdasarkan alpha. Anda tidak dapat menggunakan z-buffer untuk membuat soft z-tes tanpa menggunakan cakupan MSAA dan alpha-to. Kualitas itu tidak akan bagus, tetapi itu yang terbaik yang bisa Anda lakukan. Alternatif yang lebih cepat adalah pola atau noise dither, atau ambang kuno yang baik jika semua sprite Anda memiliki tepi yang cukup tajam.
3) Tambahkan lintasan ketiga ke objek yang dapat ditutup kembali yang menarik warna oklusi menggunakan uji-z dan pastikan lis tersebut digambar sebagai lintasan terakhir.
Saya agak baru di shader, khususnya di Unity, dan saya tidak tahu bagaimana cara membuatnya bekerja dengan baik.