Porady potrzebne do silnika fizyki

12

Niedawno rozpocząłem projekt budowy silnika fizyki. Miałem nadzieję, że możesz mi udzielić porady dotyczącej dokumentacji i / lub najlepszych technologii w tym zakresie.

Przede wszystkim widziałem, że w przypadku tego zadania wysoce zalecane jest opracowanie Game-Physics-Engine-Development i zastanawiałem się, czy możesz dać mi drugą opinię. Ponadto, przeglądając Amazon, natknąłem się na architekturę Game Engine, a ponieważ chcę zbudować silnik fizyki do gier, pomyślałem, że może to być również dobra lektura.

Po drugie, wiem, że symulowanie fizyki wymaga dużej mocy obliczeniowej, więc chciałbym użyć CUDA lub OpenCL. Teraz skłaniam się ku OpenCL, ponieważ działałoby to zarówno na chipsetach NVIDIA, jak i ATI.

PS: Będę implementować to w C ++ na Linuksie.

adivasile
źródło

Odpowiedzi:

10

Oto jak nauczyłem się pisać silnik fizyki, który jest całkowicie darmowy i wysoce godny polecenia:

  1. Artykuły Davida Baraffa szczególnie Wprowadzenie do modelowania fizycznego

  2. Teza Briana Vincenta Mirticha Dynamiczna symulacja sztywnych układów ciała oparta na impulsie

  3. Kacic / Bullock „Praktyczny system dynamiki” SIGRAPH 2003, EDYCJA: Dodano link .

Dokumenty te wspomniano w innym świetnym artykule Nicka Porcino (LucasArts) w jednym z klejnotów Gems 4 „Writing a Verlet-Based Physics Engine”. Nie jest za darmo, ale jest wart każdego grosza.

Zobacz także inne silniki, oto źródło Bullet Physics Engine .

O implementacji CUDA / OpenCL: najpierw uruchom procesor, jest to wystarczająco skomplikowane :)

Pamiętaj, że najprawdopodobniej po pewnym czasie wyrzucisz silnik, ponieważ po prostu zbyt trudno jest stworzyć stabilny i dobrze zintegrowany silnik fizyki z konkurencyjna lista funkcji na własną rękę, jednak jest to świetna nauka!

Gdy tylko uruchomisz prosty silnik, moja rada brzmi: wykonaj scenariusze testowe, w których porównasz wynik swojego silnika z wynikiem innego silnika. Pomogło mi to znaleźć wiele błędów i poprawi twój interfejs; coś jak przykładanie podobnej siły przez 1 sekundę do tego samego korpusu w obu silnikach.

Na koniec: ignoruj ​​kolizje na początku, najpierw skup się na stabilnej symulacji.

Maik Semder
źródło
Wygląda na świetną odpowiedź, ale możesz ją trochę sformatować.
Kaczka komunistyczna
Dzięki za opinie. Zgadzam się, że nie będę w stanie stworzyć konkurencyjnego silnika, ale moim głównym celem w tym zakresie jest część uczenia się.
adivasile
1
@Komunistyczna kaczka dziękuje za podpowiedź, byłem nowy z boku i przyznaję, że byłem zbyt leniwy, aby sprawdzić opcje formatu, naprawiłem go :)
Maik Semder
1
Dodałem link do artykułu Kacica, mam nadzieję, że to właściwy :)
Ray Dey
5

Maik ma rację, prace Baraffa są doskonałym początkiem, ale nie zapominaj, że Chris Heckers pisze o sztywnej dynamice ciała: http://chrishecker.com/Rigid_Body_Dynamics !

Również jego rada dotycząca „[…] wyrzucisz silnik” jest całkowicie prawdziwa. Ale wiele się nauczysz!

Odnośnie części Twojego pytania do CUDA / OpenCL: Jeśli znasz CUDA, przejście na OpenCL staje się bardzo łatwe. Polecam najpierw naukę CUDA, ponieważ jest tam tak wiele dobrych samouczków, przykładowych bibliotek kodu i obliczeń. Na przykład:

Pamiętaj jednak: rozpoczęcie pracy w CUDA jest łatwe, rozpoczęcie symulacji fizyki jest o wiele trudniejsze, ale połączenie obu jest sporym wyzwaniem!

Jonas Bötel
źródło
masz absolutną rację, to kolejny świetny zasób, o którym należy wspomnieć, +1 do artykułu Chrisa Heckera
Maik Semder
4

Zaczynałem też od Baraffa, ale teraz jest to trochę przestarzałe. To, czego potrzebujesz, to iteracyjne solwery, a najlepszym imo na papierze jest iteracyjna dyanmika Erin Catto . Masz wszystko, czego potrzebujesz, aby wdrożyć silnik fizyki. Możesz zagłębić się w pracę doktorską Erlebena, jeśli potrzebujesz więcej szczegółów (takich jak stawy i więcej matematyki), ale to wszystko. Żałuję, że nie znalazłem go od samego początku - przejrzyj trochę forum Bullet, jest tam mnóstwo informacji (może za dużo).

Jeśli chodzi o książki, wiele książek jest rozczarowujących, ale polecam animację opartą na fizyce Kenny'ego Erlebena lub Game Physics Pearls.

Nie znam dużo CUDA / OpenCL (chociaż zawsze chciałem to zrobić), ale zdecydowanie powinieneś sprawdzić pracę Takahiro Harady.

Mihai F.
źródło