XNA Добавление кратеров (через GPU) с эффектом «прожига»

В настоящее время я работаю над двумерным клоном «Worms» в XNA, и одна из особенностей - «деформируемая» местность (например, когда ракета попадает в местность, происходит взрыв и часть ландшафта исчезает ).

В настоящее время я использую текстуру, которая имеет все более высокое значение красного цвета по мере приближения к центру. Я просматриваю каждый пиксель текстуры "Деформировать", и если текущий пиксель перекрывает пиксель ландшафта и имеет достаточно высокое значение красного цвета, я изменяю массив цветов, представляющий местность, на прозрачный. Если текущий пиксель НЕ имеет достаточно высокого значения красного, я затемняю цвет ландшафта (он становится тем чернее, чем ближе значение красного к порогу). В конце этой операции я использую SetData для обновления текстуры ландшафта.

Я понимаю, что это не лучший способ сделать это, не только потому, что я читал о остановках конвейера и тому подобном, но и потому, что он может стать довольно медленным. если одновременно добавляется много кратеров. Я хочу переделать свою генерацию кратера на графическом процессоре вместо того, чтобы использовать Render Targets "пинг-понг" между целью и текстурой, которую нужно изменить. Проблема не в этом, я знаю, как это сделать. проблема в том, что я не Я не знаю, как сохранить эффект ожога с помощью этого метода.

Вот как выглядит эффект ожога прямо сейчас:

Burn Effect

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

5
задан Glorfindel 9 August 2019 в 23:10
поделиться