Z tego, co rozumiem, typowy interaktywny system kratownicy wymagałby istotnych obliczeń, ponieważ każdy element wpływa na cały system. Myślę, że możesz dowolnie zatrzymać się na danej liczbie iteracji kosztem dokładności w symulacji, ale nie wiem, czy takie podejście wykorzystują te gry (gry budujące mosty są przykładem systemów kratownicowych). Z drugiej strony gry takie jak Dig czy Die mają dość złożony system strukturalny, który uwzględnia również moment obrotowy (jak sądzę) i kompresję oraz jest bardzo szybki i działa na bardzo rozbudowanych systemach. Wydaje mi się, że podstawowe obliczenia mogą być podobne, ale jeśli nie, interesują mnie oba podejścia.
Czy wiecie, jak to się robi? Czy mają arbitralne ograniczenie, czy też używają zupełnie innego algorytmu? Myślę też, że cokolwiek wymyślicie, można zastosować do systemów 3D, ale jeśli nie lub jeśli nie jest to oczywiste, proszę przynajmniej dać wskazówkę, jak można go użyć do 3D, ponieważ interesuję się tym zarówno w 2D, jak i 3D Gry.
Wiem, że nie powinienem tutaj dziękować, ale niesprawiedliwe jest, aby przynajmniej nie podziękować za poświęcony czas, mam nadzieję, że ten akapit nie zostanie usunięty.
EDYCJA: Gdybym zgadywał, powiedziałbym, że Dig lub Die przechowują wektory dla każdego bloku, a następnie uruchamiają algorytm iteracyjny do tego stopnia, że dodatkowa dokładność symulacji nie ma znaczenia dla granic systemu (na przykład system byłby zbyt duży, by i tak się nie zawalić), więc jest ograniczony przez pół-dowolną (ponieważ opiera się na aplikacji) liczbę iteracji. Ale mogę się mylić.
Odpowiedzi:
Jestem twórcą Dig or Die, więc mogę podać trochę więcej szczegółów na temat fizyki gry
Rzeczywiście najważniejszym punktem były osiągi, ponieważ w grze można budować tysiące fizycznych bloków, a co ważniejsze, mam inne rzeczy bardziej skomplikowane do symulacji (deszcz / woda), więc mogę zaoszczędzić bardzo mało czasu procesora na fizykę budynku .
Więc właściwie zrobiłem coś w rodzaju ... Nie wiem, niestandardowy osobisty algorytm niezbyt dokładny, ale działa wystarczająco dobrze dla gry. Mam 1 wektor na każde przecięcie bloku (więc każdy blok jest połączony maksymalnie 4 wektorami, po jednym z każdej strony). Każdy blok ma „wagę” i „popycha” wektory wokół niego (równomiernie), więc suma wielkości wektorów jest równa jego wysokości. Kiedy blok jest zakotwiczony do podłoża, wszystkie siły / ciężar, które są do niego wpychane, nigdy nie są „wypychane”, więc naturalnie przy wystarczającej liczbie iteracji cały system znajduje równowagę. Ciężar / siła będzie niejako „przepływać” do punktów kotwiczenia i bardzo dobrze zarządzać zmianami w konstrukcji. Możesz zobaczyć wynik tutaj (z elementem gry „Okulary Eiffla”):
Jeśli chodzi o momenty, symuluję je, mnożąc siły przenoszone poziomo. Nie jest idealny, ale wystarczy poczuć dużą różnicę między budowaniem w poziomie i w pionie
Ale szczerze mówiąc, mój system mi się nie podoba, w niektórych przypadkach nie jest zbyt dokładny; głównie dlatego, że nie zarządzam kompresją i rozszerzaniem. Prawdopodobnie istnieje sposób na wykonanie dokładniejszej symulacji niż moja bez większego procesora, ale moje umiejętności (i czas) były bardzo ograniczone, więc zrobiłem, co mogłem :-)
(PS: zgadujesz, że były bardzo dobre :-))
źródło
Osobiście miałem dobry sukces w Iterative Relaxation . Myślę, że całkiem nieźle podąża za prawami fizyki w przypadku obiektów wykonanych z agregatów bloków. Wierzę, że seria BridgeBuilder opiera się na takiej metodzie, choć nie mam źródła, które by to potwierdził.
Relaksacja iteracyjna jest szeroko stosowana w przypadku kratownic , ale z powodzeniem przeprowadziłem symulację dużych obiektów litych (betonu): jest to po prostu kratownica, której stawy przenoszą obciążenie zamiast się swobodnie obracać.
Co ciekawe, relaksacja jest techniką rozwiązywania kratownic statycznych, więc jest dokładna. W tym względzie służy do iteracyjnego obliczania przemieszczenia, które doprowadza strukturę do równowagi.
Ale wartością dodaną dla gry (w której interesują nas środowiska dynamiczne, ponieważ statyczne struktury równowagowe są nudne) jest to, że mamy szansę faktycznie przesunąć połączenia struktury między każdą iteracją, w oparciu o obliczone dotychczas ograniczenia . Otrzymujesz dwie główne korzyści:
Zazwyczaj analiza statyczna stawia hipotezę o małym odkształceniu , w którym struktura nie odbiega daleko od stanu początkowego. W tych granicach analiza statyczna jest poprawna, ponieważ połączenia nie są tak naprawdę przemieszczane . Ale gdy struktura odkształca się pod kruszącym się ciężarem, otrzymasz dokładne wyniki do końca z nieliniową symulacją, podczas gdy po prostu uzyskasz nieprawidłowy stan z liniowego solwera
Relaksacja iteracyjna jest dość prosta do wprowadzenia, Stabilność numeryczna . Z powodzeniem zastosowałem schemat RK4, aby osiągnąć stabilność przy dużych konstrukcjach betonowych. Wadą jest to, że zwykle ma dość małą sztywność ze względu na wydajność, więc czasami może przypominać miękką galaretkę.
źródło