Jak mogę stworzyć tło z dużą przestrzenią, które będzie się powtarzać w grze rts. Chcę też mieć złożone pola mgławic i pyłu, ale ponieważ jednostki będą miały dużo miejsca do eksploracji, nie mogę mieć 120000px na 1200000px jpeg, więc chcę, aby obraz się powtarzał, ale nie chcę zmieniać linii między segmentami.
Używam tego z frameworkiem Babylon firmy Microsoft do płótna WWW GL
Odpowiedzi:
Użyj przewijania paralaksy. Mają wiele warstw tła, które przewijają się z różnymi ułamkami prędkości głównego punktu widzenia. Im niższa warstwa, tym wolniej się przewija. To nie tylko świetny sposób na złudzenie głębi, ale także sprawia, że tła wyglądają mniej powtarzalnie, ponieważ obiekty na różnych warstwach pojawią się w różnych kompozycjach, ponieważ warstwy nie są zsynchronizowane.
stwórz swoje tła proceduralnie. Zamiast jednej wielkiej grafiki w tle, miej wiele różnych mniejszych elementów i umieść je wszystkie wielokrotnie losowo w całym świecie gry.
A tak przy okazji: nie używaj JPEG, kiedy możesz tego uniknąć. Jest to format stratny, który traci jakość za każdym razem, gdy go modyfikujesz i zapisujesz, jest mocno zoptymalizowany pod kątem fotografii i nie obsługuje przezroczystości. Użyj bezstratnego formatu z kanałem alfa, takim jak PNG. Jedynym dobrym powodem jest to, że twój obraz źródłowy jest dostępny tylko w formacie JPEG (NASA opublikowała wiele ładnych zdjęć astronomicznych, które są własnością publiczną) i nie chcesz na nich dokonywać żadnych modyfikacji.
źródło
Sposób na zbudowanie nieskończonego tła dla gry 2D jest następujący:
Mam nadzieję że to pomoże.
źródło
Warstwy działają dobrze.
Oto kilka matematyki:
Załóżmy, że masz tor kolejowy, który został źle wykonany, w ten sposób
__ __
zauważają przerwę między nimi. Kiedy koło się po nich toczy, robi małe wycięcie (małe wycięcie).Jeśli długość toru wynosi,
l
a koło ma promień,r
wówczas2pi r
jest to obwód koła,ration=l/(2pi r)
jeśli stosunek wynosi powiedzmy 10,25, wówczas koło dostanie się w nim co kwartał, ponieważ jeździ długo.Jest to najprostszy sposób, w jaki mogę wyjaśnić pokrycie przestrzeni.
Załóżmy, że masz dwa obrazy, jeśli jeden ma ten stosunek ćwiartki, otrzymasz wzór 4-fazowy, powtórzy się po 4 kafelkach. Załóżmy, że masz 1 główne tło i 2 nakładki z fazami min. Następnie wzór powtórzy się po m * n kafelkach.
Chociaż nie będzie to miało większego znaczenia, wzór będzie wyglądał najlepiej, jeśli liczby są równe liczby pierwsze, to największy wspólny dzielnik to 1. Na przykład załóżmy, że mamy coś z fazy 6 i coś z fazy 4, w każdej innej fazie będą one „ustawiać się w linii " w sensie.
Możesz użyć tej techniki (szczególnie z cząstkami i innymi rzeczami), aby stworzyć wiele „unikalnych” rzeczy przy bardzo małym wysiłku.
Wróć do koła pociągu, jeśli stosunek jest nieracjonalny, wówczas wycięcia zakryją koło! Ale to tak naprawdę nie ma znaczenia.
źródło
Oto kolejny pomysł, którego chyba brakuje:
W przypadku tła na duże odległości, takiego jak niebo, warstwy Paralaksy nie są naprawdę dobre. Pomyśl na przykład o gwiazdach, gdy chodząc po ziemi, a jeszcze lepiej przez całą noc, wszystkie gwiazdy poruszają się razem, chociaż wiemy, że są setki lub myśli w odległości roku świetlnego od siebie. Chodzi o to, że są zbyt daleko, abyśmy mogli zauważyć ich odległości. Wszystko to powiedziało, że nadal chcemy bardzo dużej tekstury (powiedzmy 120k * 120k), która zostanie narysowana przy naszej ograniczonej mocy obliczeniowej (która może obsłużyć co najwyżej 8k * 8k). Podobnie jak w przypadku korzystania z wielu warstw paralaksy, należy tworzyć różne tekstury, każda z różnymi rodzajami szczegółów. Na przykład jedna reprezentuje galaktyki, druga to wiązka gwiazd itp. Ale tym razem zamiast przesuwać je z różnymi prędkościami, powinny różnić się wielkością. Oto przykład: rozważ użycie 3 tekstur, jeden to 2048 * 2048, drugi to 729 * 729, a trzeci to 625 * 625. Ponieważ te liczby są wzajemnie kopiowane, łącząc te 3 tekstury w 3 warstwach, należy przesunąć lcm (2048,729,625) = 764 mln pikseli od początku, aby zobaczyć, że rysowana jest ta sama rzecz, co trochę przypomina nieskończoność. W rzeczywistości możesz dodać inne warstwy lub zmienić rozmiar każdej tekstury i zawsze uzyskasz wynik tak duży jaknajmniej wspólna wielokrotność rozmiarów tekstur.
źródło
Wydaje się, że jest to zadanie dla proceduralnego modułu cieniującego piksele.
Korzyści z używania obrazu to:
Proste wyszukiwanie w Internecie powoduje wyświetlenie tego modułu cieniującego http://casual-effects.blogspot.com.au/2013/08/starfield-shader.html, który wygląda tak, jak szukasz.
Nie jestem ekspertem od WebGL, ale według tej strony wygląda na to, że używa zwykłego języka GLSL (jest to język C-podobny używany przez karty graficzne do programowania shaderów). Oznacza to, że prawdopodobnie nie będziesz musiał wprowadzać żadnych niewielkich zmian, aby działało.
Możesz jednak spróbować zacząć od bardziej podstawowego shadera, aby zrozumieć, jak to działa.
Ta strona blogu zawiera listę wszystkich kroków umożliwiających wdrożenie modułu cieniującego w WebGL. To wydaje się dobre miejsce na początek.
Innym dobrym miejscem do znalezienia wspaniałych przykładów shaderów jest https://www.shadertoy.com/
źródło
Możesz pokroić swój duży plik JPEG na małe segmenty i umieścić je (widoczna część), nie musisz nawet przechowywać go w pamięci przez cały czas.
I podobnie jak w starych grach niektóre „kafelki” mogą się powtarzać. To było powszechne rozwiązanie dla konsoli NES, które było nawet obsługiwane przez sprzęt.
źródło