Проблема с альфа-каналом в шейдере 2D-освещения в XNA 4.0

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

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

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

проблема

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

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


person Rusty Shackleford    schedule 14.05.2011    source источник
comment
вопрос ясен ;) Возможно, вы можете опубликовать соответствующий код?   -  person Caspar Kleijne    schedule 15.05.2011


Ответы (1)


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

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

AlphaBlendEnable = true;  
SrcBlend = One;
DestBlend = One;
person Jay    schedule 18.05.2011