Silnik fizyki, który może obsługiwać wiele atraktorów?

9

Przygotowuję grę, w którą będzie grać głównie trójwymiarowa grawitacja.

Rozumiem przez to, że wiele planet / gwiazd / księżyców zachowuje się realistycznie, a także kreślenie ścieżek i przewidywanie ścieżek w polu grawitacyjnym.

Patrzyłem na różne silniki fizyki, takie jak Bullet , Tokamak czy Newton , ale żaden z nich nie wydaje się odpowiedni, ponieważ zasadniczo musiałbym ponownie napisać silnik grawitacyjny w ich ramach.

Czy znasz silnik fizyki, który jest w stanie poradzić sobie z wieloma ciałami przyciąganymi do siebie?

Nie potrzebuję zarządzania scenariuszami ani renderowania, tylko podstawową fizykę. (wykrycie kolizji byłoby dodatkową korzyścią, podobnie jak sztywna dynamika ciała).


Mam doświadczenie w fizyce, więc byłbym w stanie napisać silnik, który będzie korzystał z integracji Verleta lub RK4 (a nawet integracji Eulera, gdybym musiał), ale wolałbym raczej dostosować gotowe rozwiązanie.

[edytuj]: Istnieje kilka świetnych zasobów do symulacji fizyki problemów n-ciał online i na temat przepełnienia stosu

brice
źródło
7
Czy nie możesz po prostu użyć Bulleta i zrezygnować z jego standardowej siły grawitacji? (np. unikaj wywoływania applyGravity, wywołaj setGravity z wektorem zerowym, użyj BT_DISABLE_WORLD_GRAVITY ...) To, że pożądany efekt jest formą grawitacji, nie oznacza, że ​​musisz być w stanie go osiągnąć za pomocą interfejsów API „grawitacji” podstawowy silnik fizyki.
Neverender
Przydałoby się coś w rodzaju odwrotnych sprężyn
Roy T.
1
@RoyT. Sprężyna sama w sobie ma siłę proporcjonalną do d, podczas gdy grawitacja wynosi d ^ (- 2) (nawet nie d ^ (- 1)). Możesz uzyskać orbity z obu, ale o bardzo różnych cechach. Jeśli masz na myśli „zastosuj ograniczenie oparte na odległości dostarczone przez silnik”, to tak - jeśli ma ono odwrotny kwadrat.
Kevin Reid,
@KevinReid prawdopodobnie masz rację, ale nie jestem pewien, czy otrzymam twoje wyjaśnienie. Czy masz na myśli, że siły sprężyny są liniowe zależne od odległości, a grawitacja zależy od kwadratu odwrotnego?
Roy T.
1
Osmos to świetna mała gra. najlepszy, jaki mogłem znaleźć, to ten wywiad
Brice

Odpowiedzi:

2

Nie sądzę, że będziesz mógł używać konwencjonalnego silnika fizyki szczelin czasowych, ponieważ problem trzech ciał nie pozwoli na stabilne orbity.

Być może będziesz w stanie wyciągnąć silnik fizyki ze Stellarium lub innego pakietu astronomicznego.

Myślę jednak, że najlepszym sposobem jest po prostu upiec ścieżki swojej planety i wyciągnąć je ze stołu. O ile twój gracz nie może wpływać na trajektorię planet przez swoje działania, nie ma sensu wykonywać pełnej symulacji.

serwet
źródło
Właściwie wrt na problem n ciał, to można uzyskać stabilne orbity. To zależy od twojej metody integracji. Zarządzałem stabilnymi orbitami zarówno z verletem, jak i RK4.
Brice
To słuszna propozycja, aby wstępnie obliczyć ścieżki, ale chciałbym dynamicznie generować systemy w locie, a ponadto planety nie są tym, czym się martwię. Naprawdę chcę, aby statki były pod wpływem grawitacji, a ponieważ będą one pod kontrolą gracza, nie mogę wstępnie obliczyć ścieżek.
Brice
Dla przypomnienia, sposobem na uzyskanie stabilnych orbit są układy symetryczne. Ponadto ramy czasowe niestabilności są znacznie dłuższe niż długość przeciętnej gry. (niestabilny ponad 100 do 1000 planet orbit, podczas gdy gra nie trwa dłużej niż 4/5)
Brice
Przykłady stabilnych orbit można znaleźć na stronie to (używa Verlet)
Brice
1

Czy są jakieś ograniczenia platformy? Ponieważ PhysX z nVidii ma dokładnie to, czego szukasz, i więcej .

YuriAlbuquerque
źródło
Pozdrawiam @YuriAlbuquerque, która jest dość interesującym tropem. Planuję zrobić po stronie serwera fizyki, a po stronie klienta renderowania, więc będę musiał sprawdzić, czy jest odpowiedni, ale to brzmi dobrze.
Brice