Ваша проблема решит рендеринг с 1-битной альфа. Это означает, что вы указываете некоторую альфу исходной текстуры, которая не отображается (в основном 0,5).
Вы должны написать свой собственный шейдер для сохранения глубины от света и использовать инструкцию discard
. Discard существует также в hlsl, glsl и в cg. Он существует только в пиксельном / фрагментном шейдере и отбрасывает текущий фрагмент из рендеринга в backBuffer и в z-буфер.
if (texSample.a < 0.5)
discard;
Преимущество заключается в том, что вам не нужно менять свой рендеринг за 2 прохода, только рендеринг глубины освещения. Также я докажу, что это работает:
Если вы хотите визуализировать правильные тени для нескольких прозрачных объектов, вам придется использовать несколько текстур глубины с информацией о глубине и непрозрачности, отображаемой с помощью пилинга глубины. А для дыма, волос и т. Д. Глубокая непрозрачность или карты непрозрачности Фурье - лучшее решение (я в основном рекомендую карты непрозрачности Фурье)
редактировать: я только что понял, что я забыл добавить кредиты. Как всегда. Древовидная модель взята из петлевого проекта, который просто великолепен, если вы ищете низкополигональную, одну текстуру и бесплатные модели растительности.