W poprzednim pytaniu zasugerowano, że podpisane pola odległości można wstępnie obliczyć, załadować w czasie wykonywania, a następnie użyć z tego miejsca.
Z powodów, które wyjaśnię na końcu tego pytania (dla osób zainteresowanych), muszę utworzyć pola odległości w czasie rzeczywistym.
Istnieje kilka artykułów na temat różnych metod, które powinny być wykonalne w środowiskach czasu rzeczywistego, takich jak metody transformacji odległości Chamfer i transformacje oparte na przybliżeniu diagramu Voronoi (jak zasugerowano w tej prezentacji przez twórcę Pixeljunk Shooter ), ale Ja (a zatem można założyć, że wielu innych ludzi) bardzo trudno mi je wykorzystać, ponieważ są one zwykle długie, w dużym stopniu nadęte matematyką i niezbyt algorytmiczne w wyjaśnieniach.
Jaki algorytm zaproponowałbyś do tworzenia pól odległości w czasie rzeczywistym (korzystnie na GPU), szczególnie biorąc pod uwagę wynikową jakość pól odległości?
Ponieważ szukam rzeczywistego wyjaśnienia / samouczka, a nie linku do innego artykułu lub slajdu, to pytanie otrzyma nagrodę, gdy będzie się kwalifikować do :-).
Oto dlaczego muszę to robić w czasie rzeczywistym:
Jeśli musisz wstępnie obliczyć te pliki SDF dla dużych środowisk 2D (pomyśl o dużej mapie podobnej do Terraria), oznacza to, że akceptujesz dość duże obciążenie przestrzeni dyskowej (i czas generowania mapy) na rzecz implementacji bardziej skomplikowany algorytm wystarczająco szybki do generowania SDF w czasie rzeczywistym.
Na przykład stosunkowo niewielka mapa o wielkości 1000 * 256 (szerokość * wysokość) o wielkości kafelka 10 * 10 pikseli, a zatem o całkowitych wymiarach 10000 * 2560 pikseli, kosztowałaby już około 2 megabajty rozmiaru, jeśli wybierzesz stosunkowo małą Rozdzielczość SDF 128 x 128, przy założeniu, że przechowujesz tylko wartości odległości od 0 do 255.
Oczywiście może to szybko stać się zbyt duże i jest to narzut, którego nie chcę mieć.
Jest coś jeszcze:
Pliki SDF mogą być używane do wielu rzeczy (takich jak wykrywanie kolizji), a niektóre przydatne aplikacje potencjalnie nawet jeszcze nie zostały odkryte. Myślę, że wiele osób będzie szukać tych rzeczy w przyszłości, a jeśli otrzymamy wyczerpującą odpowiedź tutaj, myślę, że pomożemy wielu ludziom.