Jak stworzyć ślad plazmy dla statku kosmicznego

13

Widziałem wiele świetnie wyglądających gier kosmicznych, które wykorzystują podobne efekty. Naprawdę interesuje mnie, jak generalnie niektóre z tych efektów są osiągane.

W szczególności chcę wiedzieć, w jaki sposób niektóre szlaki za statkami kosmicznymi lub pociskami są osiągane bez użycia wszystkich dostępnych zasobów.

Dla przykładów efektu mam na myśli zrzuty ekranu dla Gimbala , a nawet wideo pod tym samym linkiem. Także szlaki rakietowe w Ether Vapor .

Czy to obie te same techniki? Interesuję się głównie 2D, ale nie wyobrażam sobie, że byłoby inaczej.

Jak więc mógłbym zacząć tworzyć taki efekt? Czy mówimy o programach do cieniowania pikseli, trybach mieszania / filtrach, efektach bitmapowych, systemach cząsteczek czy co? Niezbyt specyficzne dla platformy. Po prostu szukam teorii, ale konkretne przykłady lub linki byłyby świetne. Im więcej szczegółów, tym lepiej.

Adam Harte
źródło

Odpowiedzi:

7

Jak więc mógłbym zacząć tworzyć taki efekt? Czy mówimy o programach do cieniowania pikseli, trybach mieszania / filtrach, efektach bitmapowych, systemach cząsteczek czy co? Niezbyt specyficzne dla platformy. Po prostu szukam teorii, ale konkretne przykłady lub linki byłyby świetne. Im więcej szczegółów, tym lepiej.

Wszystkie powyższe.

Jeśli nie przejrzysz ich kodu źródłowego, możesz nie wiedzieć dokładnie, jak to zrobili.

Jednak z wyglądu obu gier obie mają coś, co wydaje się być połączoną geometrią i śledzi statek. Niekoniecznie musi być podstawowym układem cząstek punktowych, ale nie jest to wcale takie trudne.

Niektóre gry wykorzystują algorytm linii zakrzywionej i generują z niego listę wierzchołków oraz wykonują trochę teksturowania z różnymi teksturami zastosowanymi w dwóch punktach końcowych szlaku, aby w jednym punkcie wydech wyglądał na gorący, a w drugim był chłodniejszy i odchodzi w kosmos.

Statek gracza jest interesującym przypadkiem, ponieważ ruchy są nieprzewidywalne i może być konieczna aktualizacja punktów kontrolnych algorytmu krzywej lub próbkowanie najnowszej pozycji statku i wygenerowanie na tej podstawie pozycji wierzchołków.

Spójrz na tę odpowiedź z wcześniejszego pytania, jeśli chcesz mieć coś, co działa poza punktami kontrolnymi. Jednak dla twoich potrzeb próbkowanie pozycji graczy prawdopodobnie działałoby znacznie lepiej i byłoby łatwiejsze do zrozumienia.

Oto coś, co sprawi, że zaczniesz myśleć:

Rozpocznij próbkowanie pozycji gracza. Punkty te utworzą segmenty bryły szlaku, z których można zbudować geometrię. Dobrym pomysłem jest utrzymanie osobnego segmentu ogona, który ma osobną teksturę. Możesz chcieć wykryć, kiedy gracz się obraca i zwiększyć częstotliwość tych segmentów, w przeciwnym razie uzyskasz blokowe krzywe. Chyba że taki jest efekt :)

W niektórych przypadkach segmenty muszą przestać się generować, a istniejące powinny powoli się zmniejszać, zaczynając od segmentu ciała znajdującego się najbliżej ogona (ale nie samego ogona). Dzieje się tak w przypadku spowolnienia gracza. Ale jeśli prędkość, z jaką pomniejszane są segmenty, odpowiada prędkości statku gracza, nowy segment zostanie utworzony w samą porę, gdy zostanie wyjęty. Działa to również dobrze w przypadku statku w pełnym ruchu. Długość szlaku zawsze będzie taka sama - co daje płynny, spójny strumień.

Segment głowa powinna być zawsze w aktualnej pozycji gracza. Jeśli zostaną wykryte jakiekolwiek obroty, istniejący segment głowy zostanie dodany do segmentu ciała i rozpocznie się nowy segment głowy. Powtarzać. W zależności od tekstury, każdy segment może mieć również maksymalną długość.

To daje nam łatwy sposób na modelowanie tego efektu: odpracowanie idei, że efekt zawsze będzie sam się zmniejszał / kurczył, chyba że dostarczonych zostanie więcej segmentów, i bawiliśmy się z szybkościami, aby zapobiec jego kurczeniu.

Jovan
źródło
4

Istnieje wiele różnych możliwości tworzenia takich tras. Możesz używać prostych linii, wielokątów, chmur punktów itp.

Wszystkie są zwykle oparte na jednej z dwóch koncepcji:

  • Śledź poprzednie pozycje i użyj ich do narysowania ogona.
  • Śledź prędkość / kierunek i na tej podstawie dostosuj ogon.

Pierwsza jest bardziej odpowiednia do takich rzeczy, jak pociski, natomiast druga metoda jest lepsza w przypadku pewnego rodzaju przywiązanych rzeczy podążających za czymś (jak ogon smoka).

Prosta implementacja ogonów silnika nie jest tak skomplikowana. Będziesz potrzebował tylko trochę bufora do przechowywania poprzednich pozycji. Nie wiem, jakiego języka używasz, ale do tego użyłbym bufora pierścieniowego lub innego podobnego bufora (szybkie usuwanie i wstawianie na końcach).

Co X-ty znacznik ramki / aktualizacji (nie musisz tego robić sto razy na sekundę), w zasadzie upuszczasz najstarszy / ostatni element w buforze i dodajesz bieżącą pozycję do jego przodu (tylko jeśli bufor jest wypełniony; upewnij się, że zawsze zawiera n elementów, gdzie n określa długość twojego ogona.

Następnie podczas rysowania zaczynasz od bieżącej pozycji i rysujesz zestaw linii przez wszystkie punkty w buforze, jednocześnie zmniejszając krycie z każdym kolejnym wierzchołkiem.

W ten sposób powinieneś mieć ładny i czysty ogon. W zależności od platformy możesz to rozszerzyć, np. Używając shaderów lub owijając ładną grafikę ogona wzdłuż tej ścieżki.

Mario
źródło