Obecnie pracuję nad klonem 2D „Worms” w XNA, a jedną z cech jest teren „odkształcalny” (np. Gdy rakieta uderzy w teren, nastąpi eksplozja, a fragment terenu zniknie).
To, co obecnie robię, polega na użyciu tekstury o stopniowo wyższej wartości czerwonej, gdy zbliża się do środka. Cyklicznie zmieniam każdy piksel tej tekstury „Deformacji”, a jeśli aktualny piksel zachodzi na piksel terenu i ma wystarczająco wysoką czerwoną wartość, modyfikuję tablicę kolorów reprezentującą teren do przezroczystej. Jeśli bieżący piksel NIE ma wystarczająco wysokiej wartości Czerwonej, czernieję kolor terenu (robi się bardziej czarny, im bliżej wartości Czerwonej jest do progu). Pod koniec tej operacji używam SetData do aktualizacji tekstury terenu.
Zdaję sobie sprawę, że nie jest to dobry sposób, aby to zrobić, nie tylko dlatego, że czytałem o straganach z rurociągami i tym podobnych, ale także dlatego, że może stać się dość opóźniony, jeśli dodaje się wiele kraterów w tym samym czasie. Chcę przerobić moją generację kraterów na GPU, zamiast tego używając renderowania „ping-ponging” pomiędzy byciem celem a teksturą do modyfikacji. To nie jest problem, wiem jak to zrobić. Problem polega na tym, że nie wiem, jak utrzymać efekt oparzenia przy użyciu tej metody.
Oto jak wygląda teraz efekt wypalenia:
Czy ktoś ma pomysł, jak stworzyć podobny efekt przypalenia (przyciemnienie krawędzi wokół uformowanego krateru)? Zupełnie nie znam Shaderów, ale jeśli będzie to wymagało, byłbym naprawdę wdzięczny, gdyby ktoś poprowadził mnie przez to, jak to zrobić. Jeśli są jeszcze inne sposoby, które byłyby świetne.