Masalah Anda akan menyelesaikan rendering dengan alpha 1bit. Yang berarti Anda menentukan beberapa alpha dari tekstur sumber yang tidak dirender (kebanyakan 0,5).
Anda harus menulis shader Anda sendiri untuk menghemat kedalaman dari cahaya dan menggunakan instruksi discard
. Buang ada di hlsl, glsl dan juga cg. Itu hanya ada di pixel / fragmen shader dan membuang fragmen curent dari rendering ke backBuffer dan ke z-buffer.
if (texSample.a < 0.5)
discard;
Keuntungannya adalah Anda tidak perlu mengubah rendering 2nd pass Anda, hanya rendering dengan kedalaman cahaya. Saya juga telah membuktikan bahwa itu bekerja:
Jika Anda ingin membuat bayangan yang benar untuk beberapa objek transparan, Anda harus menggunakan beberapa tekstur kedalaman, dengan informasi kedalaman dan opacity yang dibuat menggunakan pengelupasan kedalaman. Dan untuk asap, rambut, dll. Peta opacity dalam atau opacity Fourier adalah solusi terbaik (saya kebanyakan merekomendasikan peta opacity Fourier)
sunting: Saya baru menyadari bahwa saya lupa menambahkan kredit. Seperti biasa. Model pohon ini berasal dari proyek loopix yang sangat bagus jika Anda mencari beberapa model lowpoly, satu tekstur dan model vegetasi gratis.
Anda memerlukan shader khusus untuk pembuatan peta bayangan, sehingga Anda dapat menampilkan occluder yang valid ketika transparansi piksel / fragmen lebih besar dari treshold yang Anda tentukan. Whay ini, peta kedalaman akan dihasilkan per pixel dan bukan per poligon.
sumber
Satu-satunya cara saya bisa memikirkan melakukan ini adalah membuat tekstur peta kedalaman yang terpisah, merender pohon ke dalamnya, menghasilkan untuk kedalaman di mana alpha! = 0, jika tidak menghasilkan kedalaman = 1, kemudian menggabungkan tekstur peta bayangan ini dengan tekstur peta bayangan adegan , yang seharusnya cukup sederhana; hanya mengambil yang terkecil dari dua nilai dan mengaturnya ke peta kedalaman akhir.
Ini tidak menyelesaikan pesanan campuran; jika Anda menampilkan kedalaman di belakang tekstur alfa, maka akan ditimpa ketika Anda membuat quad dengan tekstur di atasnya, jadi untuk efek ini untuk bekerja Anda harus merender setiap quad secara individual ke dalam tekstur peta kedalaman ...
sumber