23
Witam. Niniejszym wpisem rozpoczynam serię na temat produkcji Project Galactic Storm, naszej zapowiedzianej jakiś czas temu kosmicznej sieciówki.
Jedną z najważniejszych rzeczy przy tworzeniu takich gier jest danie graczom miejsca i możliwości ekspansji. Głównym (chociaż nie jedynym) źródłem tych rzeczy będą w tym przypadku układy planetarne. Moglibyśmy pójść po najmniejszej linii oporu i użyć jednego, zrobionego “ręcznie” układu i dawać graczom po prostu jego kopie, ale jako że astronomia jest moim konikiem postanowiłem rozwiązać to bardziej realistycznie.
Jak? Biorąc pod uwagę nasze ograniczone zasoby jedynym realnym rozwiązaniem są generatory losowe. Słowo “losowe” sprawia, że brzmi to dość łatwo, wystarczy kazać komputerowi losować cyferki, ale w rzeczywistości wcale takie, niestety, nie jest. Jak ktoś nie wierzy to polecam poczytać development blog (wstrzymanej ;/) gry Subversion firmy Introversion Software. Tam mamy do czynienia z losowym generatorem miast. Wydawałoby się, że wystarczy wrzucić do generatora jakieś budynki i wylosować parę liczb, ale żeby miasto wyglądało realistycznie trzeba uwzględnić całą masę czynników.
Tak samo ma się sprawa z układami planetarnymi, chociaż jest tu o tyle prościej, że astronomia po prostu jeszcze nie dysponuje danymi na temat jakiegoś zewnętrznego układu planetarnego, choćby w dziesięciu procentach tak dokładnymi jak o naszym Układzie Słonecznym. Urbanistyka ma dużo więcej statystyk na temat miast, no i trzeba mieć jakąś wiedzę z zakresu architektury itd. Czemu to ułatwia sprawę? Ano temu, że nie mając danych porównawczych między róznymi układami nie dysponujemy tak naprawdę definicją “realistycznego” układu planetarnego, możemy więc pozwolić sobie na generowanie układów, które będą pasowały do mechaniki gry, bez ryzyka narażenia się na przesadną niezgodność z danymi naukowymi. Nie oznacza to jednak wcale wolnej amerykanki, bo chciałbym zachować zgodność z tym, co jednak wiemy.
Najwięcej wiemy o naszym własnym układzie, więc najlepiej zacząć od tego. Układ Słoneczny ma w centrum swoją gwiazdę, czyli Słońce i wiemy, że jest to podstawa istnienia układu planetarnego. Wcale nie ze względu na światło, czy ciepło, tylko ze względu na grawitację. Planety muszą krążyć wokół masywnego obiektu. Chcąc więc wygenerować układ planetarny musimy zacząć od gwiazdy. Trzeba więc napisać osobny generator, który stworzy nam realistyczną gwiazdę.
O gwiazdach wiemy sporo i trzeba tą wiedzę uwzględnić, najlepiej z zastosowaniem jednej, prostej zasady losowego generowania realistycznych obiektów złożonych (sam to wymyśliłem, nawet nie googlajcie), która brzmi: “losuj jak najmniej”. A ściślej – “nie losuj rzeczy, które możesz wyznaczyć”. A dokładniej – “określ jak najmniejszą liczbę parametrów, z których będzie można wyznaczyć wszystkie pozostałe”. Krótko mówiąc im mniej rzeczy w losowym generatorze jest stricte losowych, tym większy realizm. Jeśli zabrnęliście już tak daleko w ten wpis, to w nagrodę możecie zrobić sobie przerwę i spróbować (jeśli Was to interesuje) wymyślić które parametry gwiazdy są tymi podstawowymi, z których można określić wszystkie pozostałe jej cechy, przynajmniej w zakresie potrzebnym grze. Podpowiem, że są dwa. Jeśli wymyśliliście, albo nie chciało wam się tego robić, to zapraszam do następnego akapitu.
Pierwszy z tych parametrów jest dość oczywisty. Jest to masa gwiazdy, która pozwala określić między innymi siłę jej oddziaływania grawitacyjnego. Sama masa jednak nie wystarczy, gdyż gwiazdy ewoluują. Z wiekiem ulegają przemianom tak samo jak ludzie. Masa nie pozwoli nam określić wieku gwiazdy. Drugim niezbędnym parametrem jest więc… aktualnie spalany przez nią pierwiastek. Jeśli zgadliście, to szacun ;]
Co to w ogóle znaczy “aktualnie spalany pierwiastek”? Z fizyki w szkole powinniście pamiętać, że zjawiskiem powodującym jasne (i ciepłe) świecenie gwiazd przez miliardy lat jest fuzja. Większość gwiazd na początku swojego istnienia składa się z wodoru, który jest najlżejszym i najczęściej występującym pierwiastkiem we wszechświecie. Siła grawitacji wytwarza w jej wnętrzu wielkie ciśnienie, które z kolei powoduje wzrost temperatury. Atomy wodoru przyspieszają do olbrzymich prędkości, co sprawia, że zwykle odpychające się cząstki zaczynają się zderzać. Zderzenie dwóch atomów wodoru przy takiej prędkości powoduje, że łączą się one w jeden atom helu, wyzwalając przy tym energię. Dużo energii. Gdy kończy się wodór, fuzja zabiera się za hel. Kolejność spalanych pierwiastków jest stała i kończy się na żelazie, które zamiast wyzwalać – pochłania energię i powoduje śmierć gwiazdy w ciągu kilku sekund. Dotyczy to jednak tylko największych gwiazd, zdolnych wybuchnąć jako supernowe. Najcięższy możliwy do spalenia przez daną gwiazdę pierwiastek wyznaczamy z jej masy, mając w kodzie generatora stałą określającą jaka masa jest potrzebna do spalenia danego pierwiastka.
Tak więc mając te dwa parametry możemy wyznaczyć wszystkie pozostałe, a przynajmniej wszystkie potrzebne grze. To jednak nie wszystko, czego potrzeba do wygenerowania tysięcy gwiazd. Potrzebujemy jeszcze odrobiny statystyk i rachunku prawdopodobieństwa. Gwiazdy typu słonecznego nie występują z tą samą częstotliwością co supernowe, gwiazdy neutronowe, czy inne. Nie losujemy jednak typu gwiazdy, trzeba więc uwzględnić te statystyki przy losowaniu masy i spalanego pierwiastka (w tej kolejności, bo potrzebujemy masy, żeby określić najcięższy możliwy do spalenia pierwiastek). Można w miarę bezpiecznie założyć, że najczęściej występują najmniejsze gwiazdy spalające najlżejsze pierwiastki. Tutaj nie musimy się stricte trzymać realiów (chociaż wypada częściowo je uwzględnić) i możemy sobie pozwolić na dostosowanie tych statystyk do potrzeb gry (układy planetarne z mniejszymi, bardziej stabilnymi gwiazdami łatwiej skolonizować).
Do tego wszystkiego wystarczy dołożyć kilka stałych pomagających przy obliczeniach, jak na przykład diagram Hertzsprunga-Russela, rozpisać wszystko matematycznie i zacząć generatora używać, dostosowując jego parametry aż jego działanie będzie zgodne z oczekiwaniami, co oznacza długie godziny prób i błędów.
W następnym odcinku: generator planet.
P.S. Jeśli macie jakieś pytania/uwagi, to zapraszam do komentowania.