Проблема с альфа-каналом в 2-м осветительном шейдере в XNA 4.0 - PullRequest
2 голосов
/ 15 мая 2011

В настоящее время я изучаю HLSL на XNA, и я подумал, что лучше всего начинать после уроков несколько простых 2D-шейдеров. Я пытаюсь реализовать простой шейдер освещения в 2D.

Я рисую сцену без теней для цели рендеринга, меняю свою цель рендеринга на карту теней, рисую мой свет (каждый по отдельности) на карте теней через альфа-канал, меняю свою цель рендеринга обратно на значение по умолчанию и визуализирую сцену, а затем тени сверху.

Альфа источника света изменяется в зависимости от расстояния текущего пикселя и точки источника света, для меня все это работает нормально, за исключением случаев, когда я рендерим сцену, если два источника света перекрываются, это вызывает неприятную проблему смешения.

the problem

Я использую alphablend, когда рисую на карте теней, и когда я рисую карту теней на сцене. Я просто использую неправильные настройки смешивания здесь? Я не знаю много о blendstates.

Извините, если вопрос был расплывчатым.

1 Ответ

1 голос
/ 18 мая 2011

У меня такое уже было, когда я делал программную подсветку, когда ваши значения превышали 255 (или 1,0), и вы в конечном итоге возвращались в царство черноты. Я полагаю, что значения фиксируются с использованием операции по модулю, в результате чего значение 1.1 равно 0,1 или 256, равному 1. Я замечаю, что черный эллипс на самом деле представляет собой две сферы, соединенные ребрами, и это то, что дает мне такой вывод.

Надеюсь, это приблизит вас к пониманию и выяснению вашей проблемы. Я понятия не имею, какой код вы уже используете, но на вашем этапе техники HLSL вы можете попробовать добавить:

AlphaBlendEnable = true;  
SrcBlend = One;
DestBlend = One;
...