Seu problema resolverá a renderização com 1bit alfa. O que significa que você especifica algum alfa da textura de origem que não é renderizado (principalmente 0,5).
Você precisa escrever seu próprio sombreador para economizar profundidade da luz e usar as instruções discard
. O descarte existe em hlsl, glsl e em cg também. Ele existe apenas no sombreador de pixel / fragmento e descarta o fragmento atual da renderização em backBuffer e no buffer z.
if (texSample.a < 0.5)
discard;
A vantagem é que você não precisa alterar a renderização da segunda passagem, apenas a profundidade da luz. Também eu tenho que provar que funciona:
Se você deseja renderizar sombras corretas para vários objetos transparentes, precisará usar várias texturas de profundidade, com informações de profundidade e opacidade renderizadas usando a remoção de profundidade. E para fumaça, cabelos etc. Mapas de opacidade profunda ou opacidade de Fourier são a melhor solução (eu recomendo principalmente mapas de opacidade de Fourier)
edit: Acabei de perceber que esqueci de adicionar créditos. Como sempre. O modelo de árvore é do projeto loopix, o que é ótimo se você estiver procurando por alguns tipos de vegetação com baixa densidade, uma textura e modelos livres de vegetação.