Czym dokładnie jest silnik fizyki?

57

Program powinien pobierać dane wejściowe, przetwarzać je i dawać dane wyjściowe. Więc co dokładnie silnik fizyki przyjmuje jako dane wejściowe i dostarcza jako dane wyjściowe?

użytkownik91119
źródło
36
Wiele terminologii zadaje pytania ludziom. Nie musisz głosować podstawowych pytań po prostu dlatego, że są one podstawowe.
MichaelHouse
16
Opis programu jako czegoś, co „powinno pobierać dane wejściowe, przetwarzać je i dawać dane wyjściowe” jest tak absurdalnie uproszczonym i redukcjonistycznym sposobem myślenia o nim, że jest bezużyteczny. Zastanów się, jak odpowiedziałbyś na pytanie „Program powinien pobierać dane wejściowe, przetwarzać je i generować dane wyjściowe. Więc co dokładnie gra bierze jako dane wejściowe i zapewnia dane wyjściowe?”, Możesz na nie odpowiedzieć, ale nie jest to przydatny sposób myślenia o gra.
Jack Aidley,
10
@JackAidley Rozumiem, o co ci chodzi, ale tak naprawdę gra jest bardzo podobna: wejście: naciśnięcia klawiszy i ruchy myszy / joysticka, wyjście: zabawne obrazy na ekranie i zabawne dźwięki z głośników. To proste, tak, ale pomaga zrozumieć, czym jest „gra” pod względem obliczeniowym, a z mojego doświadczenia wynika, że ​​jest to niezwykle przydatny sposób (ale oczywiście nie jedyny) myślenia o architekturze kodu, projektowaniu zasobów, zarządzaniu projektami itp.
wjl

Odpowiedzi:

58

Silnik fizyki odpowiada za symulowanie ruchów i reakcji obiektów, tak jakby były pod ograniczeniami fizyki w świecie rzeczywistym (lub podobnym do świata rzeczywistego). Należy zauważyć, że nie jest to zwykle samodzielny program, ale raczej element większego, bardziej interesującego programu (takiego jak gra).

Dane wejściowe do symulacji fizyki to na ogół zbiór obiektów („ciał”) o właściwościach (takich jak to, czy są sztywne czy miękkie, ich masy, kształty itd.), A także zbiór sił działających na te ciała.

Na podstawie tych danych wejściowych silnik symuluje zaktualizowane pozycje i orientacje ciał i stosuje je („dane wyjściowe”). Zasadniczo, gdy obiekty zderzają się lub nakładają na siebie, jest to uwzględnione w danych wyjściowych etapu symulacji w postaci wywołania zwrotnego, do którego kod klienta może się podłączyć, aby obsłużyć określoną logikę rozgrywki odpowiednią dla kolizji.

Josh
źródło
6

Wejście to prędkość, masa i czas, wyjście to nowe prędkości. Czasami obrót / moment pędu jest również wejściem i wyjściem.

Zasadniczo silniki fizyki próbują symulować skutki zarówno grawitacji, jak i zderzeń. Dla lepszej fizyki silniki oznaczają, że obejmują one zarówno trwałe, jak i tymczasowe odkształcenie obiektów, w tym dzielenie obiektów na wiele obiektów oraz moment pędu obiektów. Idealnie symulowaliby także stres, np. Ile samochodów ciężarowych może przejechać przez ten most, dopóki się nie zapadnie, ale jest to dość rzadkie. Dalsze zmienne symulacyjne, takie jak opór powietrza, również byłyby liczone jako silnik fizyki, ale o ile wiem, nie znalazły się jeszcze w żadnej grze.

Większość silników fizycznych jest w pewnym stopniu wyspecjalizowanych i będzie symulować fizykę do poziomu niezbędnego do gry. Silniki fizyki do gier samochodowych często różnią się znacznie od silników fizyki do strzelanek 3D. Silnik fizyki gry w golfa może mieć nadmierne obliczenia interakcji między piłką golfową a poszczególnymi liśćmi trawy, jednocześnie całkowicie nie radząc sobie z zderzeniami z dużą prędkością i deformacją samochodu (na wypadek uderzenia piłką golfową) .

Piotr
źródło
1
Chciałbym zauważyć, że opór powietrza jest w rzeczywistości dość powszechną cechą silników fizyki. Każda gra, która stosuje prędkość końcową do spadających obiektów, modeluje opór powietrza.
Patrick Roberts,
@PatrickRoberts Terminal Velocity nie jest dokładnie tym, o czym myślałem wspominając opór powietrza. To by było jak powiedzenie, że Pong ma silnik fizyki, który modeluje uderzenia kinetyczne.
Peter
12
cóż, żeby być sprawiedliwym, w luźnym tego słowa znaczeniu. Modeluje idealnie elastyczne zderzenia w nieważkim środowisku. Rozumiem, że modele mogą być uproszczone, ale dlatego nazywane są modelami, ponieważ są praktycznym przybliżeniem zjawisk, których doświadczamy w rzeczywistości.
Patrick Roberts,
4

Zazwyczaj silnik fizyki służy do tego, aby obiekt w grze zachowywał się w realistyczny sposób w stosunku do swojego środowiska, bez konieczności projektowania określonych animacji dla każdego możliwego scenariusza.

W szczególności silnik fizyki weźmie model z zestawem właściwości (masa, stawy itp.) I umieści go w grze zgodnie z zestawem parametrów.

Wczesnym tego przykładem były silniki raggdoll (np. W Unreal), które modelowały sposób, w jaki bezwładne ciała spadałyby ze schodów itp.

W obecnej technologii silniki fizyki często są ściśle zintegrowane z ogólnym pakietem projektowania gier wraz z AI, interfejsem użytkownika w grze, generacją scenek przerywnikowych itp.

Z pewnością można argumentować, że silniki fizyki sięgają początków projektowania gier, np. Pong można uznać za prymitywny silnik fizyki. Jednak najważniejsze jest to, że silnik fizyki jest w stanie generować punkty animacji w locie w oparciu o zestaw parametrów, a nie tylko przy użyciu wcześniej określonych sekwencji animacji z przechwytywania ruchu lub animacji ręcznej.

Jak wspomniano w innych odpowiedziach, w niektórych klasach lub grach, takich jak kierowanie pojazdem lub symulacja lotu, silnik fizyki może być fundamentalny dla gry i jako taki będzie głównym wkładem napędzającym animację na ekranie. Chociaż zazwyczaj termin ten jest używany jako narzędzie ogólnego zastosowania, które może być stosowane w różnych sytuacjach bez konieczności bardzo szczegółowej wiedzy lub analizy kontekstu ze strony dewelopera, a nie bardzo konkretnego symulatora zbudowanego z ziemi dla konkretnego zastosowania.

Chris Johns
źródło
4

Silnik fizyki odpowiada za symulację ruchu obiektów w „świecie” (cokolwiek to znaczy w kontekście silnika). Większość silników fizyki używa obecnie do tego mechaniki Newtona, ponieważ są one stosunkowo łatwe do symulacji i „wystarczająco dokładne” do większości celów, chyba że wykonujesz symulację kosmiczną.

Teoretycznie „czysty” silnik fizyki wymagałby trzech danych wejściowych:

  • Stan świata (obiekty, ich pozycje i prędkości) od ostatniego „tiku” (ostatniej chwili, w której silnik musiał modelować)
  • Ile czasu minęło od ostatniego tyknięcia
  • Lista sił działających na różne obiekty na świecie od ostatniego tyknięcia

Biorąc pod uwagę bezwładność i siły, silnik porusza obiektami. Wyjściem silnika fizyki jest po prostu nowy stan „świata” , który gra może następnie odczytać i zmodyfikować w razie potrzeby.

W praktyce silniki fizyki niekoniecznie są tak „czyste” . Obiekty muszą być tworzone i niszczone, a czasami muszą być przenoszone w sposób, na który nie pozwalają prawa silnika fizyki. Czasami można to zrobić poza silnikiem, ale czasem jest to zrobione wewnątrz, a do tego silnik potrzebuje więcej danych wejściowych. Ale trzy powyższe dane wejściowe obejmują podstawy.

Załóżmy na przykład, że musisz przenieść postać w grze za pomocą joysticka. Jeśli nie używasz silnika fizyki, jest to dość proste: kiedy widzisz, że użytkownik porusza joystickiem, odpowiednio przesuwasz obiekt. W silniku fizyki obiekt nie porusza się bezpośrednio: przykładasz do niego siłę odpowiadającą kierunkowi, w którym chcesz, aby obiekt poruszał się, i pozwalasz silnikowi na poruszanie nim .

Co za różnica? Nawet jeśli na świecie nie ma nic innego, mało prawdopodobne jest, aby obiekt poruszał się w ten sam sposób, ponieważ silnik fizyki poradzi sobie z takimi realistycznymi przyspieszeniami. Ale możliwe jest również, że na obiekt mogą oddziaływać jednocześnie inne siły, podobnie jak bezwładność, a silnik weźmie je wszystkie pod uwagę . Na przykład, jeśli przyłożysz do obiektu siłę skierowaną na północ, ale coś innego przykłada siłę skierowaną na zachód (lub obiekt już poruszał się na zachód i nic tego nie spowalnia), silnik przesunie obiekt na północny zachód.

Właśnie to dostaje silnik fizyki: śledzi obiekty, ich pozycje i prędkości oraz siły działające na nie. Dzięki prawom mechaniki może nawet samodzielnie wytworzyć pewne siły, aby automatycznie poradzić sobie z takimi zderzeniami, tarciem i grawitacją, a wszystko to bez ciebie, twórcy gry, bez konieczności wykonywania dodatkowych czynności.

The Spooniest
źródło
1

Silnik fizyki to w zasadzie symulator ciał fizycznych.

Wejście

Pozwala tworzyć ciała (lub wiele), określając jego właściwości fizyczne, takie jak masa, rozmiar, gęstość itp.

Pozwala także zdefiniować właściwości świata fizyki, w którym zachodzi symulacja (np. Grawitacja).

Wreszcie pozwala na przykładanie sił lub tworzenie połączeń między ciałami.

Wynik

Po zdefiniowaniu wszystkich tych rzeczy możesz rozpocząć symulację, a silnik fizyki poinformuje Cię, gdzie każde ciało zostanie umieszczone w następnym kroku czasowym (co zwykle odpowiada następnej klatce w grze). I następny i tak dalej ...

Na ekranie widać duszki poruszające się, ponieważ każda klatka silnika gry pyta silnik fizyki

Gdzie jest teraz to ciało?

a Game Engine odpowiednio aktualizuje reprezentację graficzną.

Uwagi

Zazwyczaj lubię postrzegać silnik fizyki jako narzędzie do stosowania praw fizyki w sposób deklaratywny .

W rzeczywistości zamiast pisać kod opisujący, jakie obliczenia należy wykonać, aby określić, gdzie będzie ciało w następnym czasie, po prostu opisuję świat fizyki ustalając atrybuty ciał (i samego świata fizyki) i pozwalam silnikowi fizyki odpowiedzieć to pytanie do mnie.

Luca Angeletti
źródło
Twoja sekcja „rozważań” wcale nie jest dla mnie jasna. Jeśli poprawisz to, aby było bardziej jasne i konkretne / praktyczne (np. Podasz rzeczywiste przykłady systemu, które zaobserwowałeś, zbudowałeś itp.), Wtedy dam ci +1.
code_dredd
@ray: Dziękuję za sugestię. Naprawię to jak najszybciej!
Luca Angeletti,
Pamiętaj, aby po skończeniu strzelać mi komentarz i nie spiesz się. Powinien być później przydatny dla innych.
code_dredd