6. Komentarze i wnioski

Ta sekcja zawiera różne uwagi, które nie pasują nigdzie indziej.

Kontrola ruchu

Aby mieć wpływ na ruch symulowanego obiektu, musimy po prostu przenosić odpowiednio cząstki. Jeżeli osoba jest trafiona w ramię, przenosimy cząstki ramienia do tyłu na odległość proporcjonalną do siły uderzenia. Całkowanie Verleta będzie wtedy automatycznie ustawiać ruch ramienia.

To również ułatwia symulację „dziedziczenia” prędkości z podstawowego systemu animacji tradycyjnej. Wystarczy zapisać pozycje cząstek dla dwóch klatek, a następnie podać je do całkowania Verleta, które następnie automatycznie kontynuuje ruch. Bomby mogą być realizowane przez wypchnięcie każdej cząstki daleko od wybuchu na odległość odwrotnie proporcjonalną do kwadratu odległości między cząstkami i centrum bomby.

Jest możliwe, aby ograniczyć się do konkretnej kończyny, powiedzmy ręki, do stałego miejsca w przestrzeni. W ten sposób można zaimplementować kinematykę odwrotną: wewnątrz pętli relaksacyjnej zachowaj ustawienia pozycji danej cząsteczki (lub kilku cząstek) do pozycji wymaganej. Nadanie nieskończonej masy cząsteczce (invmass = 0) uczyni ją nieruchomą. W Hitmanie, strategia ta jest używana podczas przenoszenia korpusu; ręka (lub szyja lub stopa) jest ograniczona do podążania za ręką gracza.

Obsługa tarcia

Temat tarcia nie została jeszcze przez nas podjęty. Oznacza to, że jeżeli nie zrobimy czegoś więcej, cząstki będą ślizgać się po podłodze, jakby ta była wykonana z lodu. Zgodnie z modelem tarcia Coulomba, siły tarcia zależą od zwykłych sił działających między obiektami będącymi w kontakcie (?). Aby to zaimplementować, badamy głębokość przenikania d,,p,, kiedy przenikanie wystąpi (przed planowaniem punkt przenikania jest poza przeszkodą). Po projekcji cząsteczek na powierzchnię, prędkość styczna **v,,t,,** jest następnie zredukowana o wartość proporcjonalną do d,,p,, (współczynnik proporcji zostaje stałą tarcia). Odbywa się to przez odpowiednie modyfikowanie x^^*^^. Patrz rys. 10. Należy uważać, żeby prędkość styczna nie odwracała kierunku prędkości – w tym przypadku należy ją po prostu ustawić na zero, ponieważ oznacza to, że punkt przenikania został ustawiony do przemieszenia się stycznie. Pozostałe i być może lepsze modele tarcia mogą i powinny być zaimplementowane.

Detekcja kolizji

Jednym z wąskich gardeł w zaprezentowanej tutaj symulacji fizyki jest wykrywanie kolizji, które potencjalnie przeprowadzane jest kilkakrotnie wewnątrz pętli relaksacyjnej. Możliwe jest jednak, aby iterować inną ilość razy względem różnych ograniczeń i nadal uzyskiwać dobre wyniki.

W Hitmanie, system detekcji kolizji działa poprzez umieszczenie wszystkich trójkątów wewnątrz pudła znajdującego się wokół symulowanego obiektu (odbywa się to przy użyciu drzewa ósemkowego). Dla każdego trójkąta (statycznego, będącego elementem tła) struktura szybkiego sprawdzania kolizji z zamkniętymi cylindrami jest następnie konstruowana i umieszczana w cache’u. Strategia ta przyniosła całkiem przyzwoite zwiększenie prędkości.

Aby zapobiec sytuacji, w której obiekty przemieszczają się bardzo szybko przechodząc przez przeszkody (ze względu na zbyt duży krok czasowy), wykonywany jest prosty test. Wyobraźmy sobie linię (lub zamknięty cylinder z ustalonym promieniem) mającą swój początek w punkcie środkowym obiektu w ostatniej klatce i koniec w punkcie środkowym obiektu podczas obecnej klatki. Jeśli ta linia uderza w cokolwiek, wtedy obiekt ustawiany jest na pozycji punktu zderzenia. Choć teoretycznie może wydawać się to problematyczne, w praktyce działa dobrze.

Inny rodzaj „oszustwa” jest używany do symulowania martwych ciał. Jeśli coś niespodziewanego dzieje się w momencie, gdy szybko poruszająca się kończyna kończy się będąc umieszczana w końcach zamkniętego cylindra po obu stronach muru, cylinder jest przekazywany na tę stronę ścianki cylindra, gdzie cylinder połączony jest z tułowiem.

Rozmaitości ;)

Liczba iteracji relaksacyjnych użytych w Hitmanie mieści się między 1 i 10 w zależności od symulowanego obiektu. Chociaż nie jest to wystarczające do dokładnego rozwiązania globalnego systemu ograniczeń, wystarcza, aby sprawić wrażenie naturalnego ruchu. Miłą rzeczą dotyczącą tego schematu jest to, że nieprawidłowości nie akumulują się lub utrzymują się wizualnie w systemie będąc przyczyną np. ślizgania się obiektu – w pewnym sensie kombinacja projekcji i algorytmu Verleta zarządza systemem do 'distribute’ skomplikowanych obliczeń w ciągu kilku klatek (inne schematy muszą użyć dalszych technik stabilizacji technik, takich jak stabilizacji Baumgarte’a). Na szczęście, nieścisłości są najmniejsze lub nawet nie istnieją, gdy istnieje niewiele ruchu i największe, gdy istnieje dużo ruchu – to jest ładne, ponieważ szybki lub złożony ruch maskuje nieco drobne nieścisłości dla ludzkiego oka.

Rodzaj miękkich ciał może także być zaimplementowany za pomocą „miękkich” ograniczeń, tj. ograniczeń, które mogą mieć tylko pewien procent odchyleń „naprawiony” w każdej klatce (tzn. jeśli pozostała długość pręta między dwiema cząstkami wynosi 100, ale faktyczna odległość wynosi 60, kod relaksacyjny może najpierw ustawić odległość na 80 zamiast 100, w następnej klatce 90, 95, 97,5 itd.).

Jak wspomniano, celowo zdecydowaliśmy się zrezygnować z użycia ciężkiej matematycznej notacji, aby dotrzeć do szerszego grona odbiorców. Oznacza to, że nawet jeśli przedstawione metody są oparte na mocnych podstawach matematycznych, ich pochodzenie może wydawać się niejasne, a nawet magiczne.

W rozumieniu matematycznym, to, co robimy, to wybór 'czasokrokowego’ podejścia do inkluzji różniczkowych (rodzaj równań różniczkowych) za pomocą prostego wyboru algorytmu punktu wnętrza (patrz [((Stewart))]), gdzie dyskutowane jest podobne podejście). Podczas próby spełnienia ograniczeń, tak naprawdę 'are projecting’ stan systemu na 'manifold’ opisany przez ograniczenia. To z kolei jest wykonywane przez system rozwiązywania równań liniowych. Równania liniowe lub kod w celu rozwiązania ograniczeń można uzyskać poprzez korzystanie z Jacobianu z ograniczeniem funkcji. W niniejszym artykule relaksacja została omówiona jako domniemany sposób rozwiązywania systemu. Choć nie poruszyliśmy tutaj tego tematu, to jest czasami przydatne do zmiany współczynnika relaksacji lub nawet do korzystania z nadrelaksacji (patrz [((bibcite Press))] dla wyjaśnienia). Ponieważ rozwiązywanie relaksacji czasami zbiega wolno, można również wybrać inny sposób konstruowania równania systemu i korzystać z innych metod rozwiązywania (na przykład rozwiązywanie metodą gradientu sprzężonego macierzy rzadkiej z wykorzystaniem wyników z poprzedniej klatki (wykorzystanie spójności)).

Należy pamiętać, że całkowanie Verleta istnieje w wielu wariantach, np. całkowanie Leapfroga i całkowanie prędkości Verleta (velocity Verlet integrator). Poprzez ich wykorzystanie można zwiększyć dokładność.

Niepożądane zachowania (dzielenie przez zero zazwyczaj spowodowane przez zachodzenie na siebie cząsteczek) mogą być obsługiwane przez losowe drobne dyslokacje cząstek.

Jako optymalizacja, ciała powinny otrzymać przerwę, kiedy odpoczywają.

Aby spróbować zabawy z animacją systemu martwych postaci w grze Hitman: Codename 47, otwórz plik Hitman.ini i dodaj dwie linie „enableconsole 1” i „consolecmd ip_debug 1” na dole samym dole. Wskazanie kursorem na wroga i naciśnięcie Shift + F12 spowoduje niewielki wybuch bomby w jego pobliżu i sprawi, że odleci. Naciśnij K, aby przełączyć tryb wolnej kamery (kamera jest kontrolowana przez klawisze kursorów, Shift i Ctrl).

Należy pamiętać, że ponieważ wszystkie operacje odbywają się w zasadzie na poziomie cząsteczek, algorytmy mogą się nadawać do przetwarzania wektorowego (np. Playstation 2).

Wnioski

Niniejszy dokument opisuje, w jaki sposób został zaimplementowany system fizyki w grze Hitman. Leżąca u podstaw filozofia łącząca metody iteracyjne ze stabilnym całkowaniem okazała się być skuteczna i przydatna do realizacji w grach komputerowych. Most notably, the unified particle-based framework, which handles both collisions and contact, and the ability to trade off speed vs. accuracy without accumulating visually obvious errors are powerful features. W szczególności, jednolity, oparty na cząsteczkach framework, który obsługuje zarówno kolizje jak i 'contact’, a także zdolność docierania do handlu od prędkości vs dokładności bez akumulacją wizualnie oczywiste błędy są potężne funkcje. Oczywiście, istnieje nadal wiele miejsc, które można poprawić. W szczególności, czworościenny model ciała sztywnego wymaga pracy. Jest to w trakcie pracy.

Przeprowadziliśmy ostatnio w IO Interactive kilka eksperymentów z interaktywną symulacją wody i gazu z wykorzystaniem pełnego równania Naviera-Stokesa. Pracujemy obecnie nad zastosowaniem technik podobnych do tych zademonstrowanych w niniejszym dokumencie z zamiarem stworzenia szybszej i bardziej stabilnej symulacji wody.

Podziękowania

Autor pragnie podziękować Jeroen Wagenaar za owocną dyskusję i całej załodze IO Interactive za współpracę i stworzenie wspaniałego środowiska pracy.

Opinie i komentarze mile widziane: tj@ioi.dk.

[[bibliography]]
: Baraff : Baraff, David //Dynamic Simulation of Non-Penetrating Rigid Bodies//, Ph.D. thesis, Dept. of Computer Science, Cornell University, 1992. http://www.cs.cmu.edu/~baraff/papers/index.html
: Mirtich : Mirtich, Brian V. //Impulse-base Dynamic Simulation of Rigid Body Systems//, Ph.D. thesis, University of California at Berkeley, 1996. http://www.merl.com/people/mirtich/papers/thesis/thesis.html
: Press : Press, William H. et al, //Numerical Recipes//, Cambridge University Press, 1993. http://www.nr.com/nronline_switcher.html
: Stewart : Stewart, D. E., and J. C. Trinkle, “An Implicit Time-Stepping Scheme for Rigid Body Dynamics with Inelastic Collisions and Coulomb Friction”, //International Journal of Numerical Methods in Engineering//, to appear. http://www.cs.tamu.edu/faculty/trink/Papers/ijnmeStewTrink.ps
: Verlet : Verlet, L. „Computer experiments on classical fluids. I. Thermodynamical properties of Lennard-Jones molecules”, //Phys. Rev.//, 159, 98-103 (1967).
: Witkin : Witkin, Andrew and David Baraff, //Physically Based Modeling: Principles and Practice//, Siggraph ’97 course notes, 1997. http://www.cs.cmu.edu/~baraff/sigcourse/index.html
[[/bibliography]]

Autor

Thomas Jakobsen jest szefem badań i rozwoju w IO Interactive, gdzie rozwija nowe technologie dla firmowego (in-house) silnika Glacier. Stworzył symulator fizyki i algorytm wyszukiwania ścieżki w 3D (’pathfinder 3D’) na potrzeby gry Hitman: Codename 47. Jakobsen zdobył tytuł magistra inżyniera na The Technical University of Denmark, gdzie również obronił swój doktorat w dziedzinie matematyki. Spędził wiele lat w środowisku akademickim i opublikował szereg artykułów naukowych dotyczących kryptoanalizy.

Dodaj komentarz