Atualmente, estou trabalhando em um clone "Worms" 2D no XNA, e um dos recursos é um terreno "deformável" (por exemplo, quando um foguete atinge o terreno, ocorre uma explosão e um pedaço do terreno desaparece).
No momento, estou fazendo isso usando uma textura que tem um valor vermelho progressivamente mais alto à medida que se aproxima do centro. Eu percorro todos os pixels dessa textura "Deformar" e, se o pixel atual se sobrepuser a um pixel do terreno e tem um valor vermelho alto o suficiente, modifico a matriz de cores que representa o terreno para transparente. Se o pixel atual NÃO tiver um valor vermelho alto o suficiente, escurecerá a cor do terreno (fica mais preto quanto mais próximo o valor do vermelho estiver do limite). No final desta operação, eu uso o SetData para atualizar minha textura do terreno.
Sei que essa não é uma boa maneira de fazê-lo, não apenas porque li sobre barracas de oleoduto e similares, mas também porque pode se tornar bastante lenta se muitas crateras forem adicionadas ao mesmo tempo. Eu quero refazer minha geração de crateras na GPU, em vez disso, usando o Render Targets "pingue-pongue" entre ser o alvo e a textura a ser modificada. Esse não é o problema, eu sei como fazer isso. o problema é que não sei como manter meu efeito de gravação usando esse método.
Veja como está o efeito de gravação agora:
Alguém tem uma idéia de como eu criaria um efeito de gravação semelhante (escurecendo as bordas ao redor da cratera formada)? Não conheço completamente Shaders, mas, se necessário, ficaria muito agradecido se alguém me explicasse como fazê-lo. Se houver outras maneiras, isso também seria ótimo.