Проблема с альфой в 2D шейдере освещения в XNA 4.0
В настоящее время я изучаю HLSL с XNA, и я подумал, что лучшее место для начала после уроков - простые 2D шейдеры. Я пытаюсь реализовать простой шейдер освещения в 2D.
Я рисую сцену без теней для объекта rendert, меняю свою цель rendert на карту теней, рисую мой источник света (каждый по отдельности) на карту теней через альфа-канал, меняю свою цель rendert по умолчанию на исходную и визуализирую сцену, а затем тени сверху.
Альфа источника света изменяется в зависимости от расстояния текущего пикселя и точки источника света, для меня это все работает нормально, за исключением случаев, когда я рендерим сцену, если два источника света перекрываются, это вызывает неприятную проблему смешения.
Я использую alphablend, когда рисую на карте теней, и когда я рисую карту теней на сцене. Я просто использую неправильные настройки смешивания здесь? Я не знаю много о blendstates.
Извините, если вопрос был расплывчатым.
1 ответ
У меня такое уже случалось, когда я работал с программным освещением, когда ваши значения превышали 255 (или 1,0), и вы оказывались в царстве черноты. Я полагаю, что значения фиксируются с помощью операции по модулю, в результате чего значение 1.1 равно 0,1 или 256, равному 1. Я замечаю, что черный эллипс на самом деле представляет собой две сферы, соединенные ребрами, вот что дает мне такой вывод.
Надеюсь, что это приблизит вас к пониманию и выяснению вашей проблемы. Я понятия не имею, какой код вы уже используете, но на вашем этапе техники HLSL вы можете попробовать добавить:
AlphaBlendEnable = true;
SrcBlend = One;
DestBlend = One;