Fizyka we wczesnych grach samochodowych na przykładzie MicroMachines i Lotus Esprit Turbo Chalenge Tomasz Urbański kl.ivti Wszelkie grafiki i nagrania wideo ogólnie dostępne za pośrednictwem dieviantart.com, google.com oraz youtube.com
Zarówno MicroMachines jak i Lotus powstały w latach 80, gdy sprzęt nie pozwalał na bardzo skomplikowane obliczenia przy zachowaniu płynności animacji. Aby zachować wrażenie realności stosowano szereg uproszczeń.
MicroMachines jest grą wyścigową wydaną na Nintendo Entertainment System (u nas był popularny jego klon Pegazus) z widokiem od góry. Przypomina trochę to wyścigi samochodów zdalnie sterowanych.
Jeden z etapów w MicroMachines.
W przypadku samochodów na zdalne sterowanie napęd stanowi układ silnika z przekładniami, który wprawia w ruch obrotowy oś z kołami. Tarcie między kołami a podłożem oraz ciężar przodu pojazdu przekłada się w efekcie na ruch do przodu. Całkiem sporo, prawda? Koniec końców chodzi tylko o ruch do przodu (ew. do tyłu, a wszystkie te czynniki wpływają na wartość przyśpieszenia i prędkość maksymalną. Wystarczy więc zaprogramować te dwie wartości.
Prędkość jest to droga przez czas. Przy stałej wartości odświeżania wynoszącej 15 klatek na sekundę mamy stały przyrost czasu w każdej iteracji (wynoszący tutaj ¼ sekundy). Teraz wystarczy uzależnić prędkość od przyśpieszenia. W przypadku samochodów na zdalne sterowanie krzywa przyśpieszenia nie jest zbyt odczuwalna, więc czemu nie uprościć jej do prostoliniowej? Przyśpieszenie prostoliniowe mówi nam, iż w każdej sekundzie wartość prędkości rośnie o stałą wartość. Ponieważ w przypadku gry zmiana czasu jest równoznaczna z kolejną iteracją, wystarczy w każdej dodać jakąś wartość do prędkości samochodu. Podobnie się dzieje podczas hamowania oraz jazdy do tyłu, z tą różnicą, że zmiana jest ujemna. Nie możemy zapomnieć również o oporach ruchu.
Lista kroków przyśpieszania i hamowania dla gry typu MicroMachines. 1. Czy prędkość > 0? Jeśli nie, pomiń krok 2. 2. Jeśli (prędkość stała oporu) < 0 to prędkość = 0. Jeśli nie zmniejsz prędkość o stałą oporu. Pomiń krok 3 i 4 //stała oporu to ustalony teoretyczny wynik wszystkich oporów ruchu. 3.Czy prędkość < 0? Jeśli nie, pomiń krok 4. 4.Jeśli (prędkość + stała oporu) > 0 to prędkość = 0. Jeśli nie zwiększ prędkość o stałą oporu. 5.Czy naciśnięto przycisk przyspieszenia? Jeśli tak, zwiększ prędkość o wartość przyspieszenia. 6.Czy naciśnięto przycisk hamowania? Jeśli tak, zmniejsz prędkość o wartość hamowania.
Warto wspomnieć o tym jak skręca samochód w takiej grze. Ponieważ potrzebujemy określić o ile w danej iteracji samochodzik przesunie się w stosunku do osi X i osi Y planszy, a mamy określoną wartość prędkości, to na chłopski rozum brakuje nam wartości skrętu, czyli kąta ruchu pojazdu. Jak mamy kąt, to liczymy wartość przesunięcia ze wzorów nowy_y = sin (kąt) * prędkość + stary_y i nowy_x = cos(kąt) * prędkość + nowy_x. Jeżeli chcemy, by pojazd startował w innym ustawieniu niż do góry, to zamieniamy z sobą funkcje trygonometryczne i/lub dodajemy do wartości kąt. Stary sprzęt nie pozwalał na obliczanie funkcji trygonometrycznych. Jako, że sterowanie było cyfrowe, a animacja na granicy płynności, pojazd mógł być obrócony w jedną z 16 stron, a wartości funkcji były przepisywane z tablic.
W grze obserwujemy efekt siły odśrodkowej. Normalnie byłaby liczona siła zależna od masy, prędkości i promienia skrętu. Najprościej można to oszukać przez zmianę wartości kąta poruszania się po zmianie położenia. Dzięki temu mamy wrażenie, że pojazd reaguje z opóźnieniem tym większym, im większa jest prędkość. Tak jest w przypadku łódek w MM.
Możemy zauważyć, że w MicroMachines wyrzucanie pojazdu jest zależne od tego czym jedziemy. Zwłaszcza jest to widoczne przy samochodzikach sportowych. Po chwili obserwacji możemy zauważyć kilka ciekawych rzeczy, jak to, że po stałym dla każdego pojazdu czasie zaczyna jechać w tą stronę, gdzie my chcemy.
Otóż mamy tutaj do czynienia z dwoma kątami (właściwie listami katów). Kąt skrętu oraz kąt ruchu. Kąt skrętu jest to kąt o który pojazd jest obrócony, zaś kąt ruchu jest to kąt pod jakim porusza się pojazd. Podczas obliczania nowego położenia pojazdu brany jest kąt ruchu. Kąt ruchu jest niczym innym jak kątem skrętu, który był ileś iteracji temu. Dzięki temu zwiększono opóźnienie skrętu oraz wprowadzono wrażenie jazdy bokiem przy bardzo mocnym skręcie. Im bardziej ma zarzucać pojazdem, tym większe jest opóźnienie. Zaś porównując kąt skrętu z kątem ruchu można ustalić czy pojazd powinien zwolnić, i czy opony mają piszczeć i dymić :) Jeżeli chcemy, by zarzucanie było bardziej zależne od prędkości i/lub podłoża, to wydłużamy bądź skracamy listę w zależności od tych czynników.
Sama gra wygląda tak: Jeżeli nie widać nagrania wideo, proszę wejść na: http://www.youtube.com/watch?v=3g-x6n-1now Warto w niektórych miejscach przeglądać nagranie klatka po klatce, zwłaszcza przy ostrych zakrętach gdy jedzie samochodzikiem sportowym.
Jak było widać, w MircoMachines jest jeszcze więcej ciekawostek. Na naszą uwagę czeka jednak Lotus Esprit w wydaniu 16bitowym.
Lotus Esprit jest grą wyścigową w pseudo 3D z widokiem od tyłu. Wydany był na różne platformy 8 i 16 bitowe, lecz najbardziej popularną wersją była ta na Amigę, przynajmniej w przypadku późniejszych wersji gry.
W grze mamy do czynienia z dwiema ciekawymi dodatkami. Pierwszym jest krzywa przyspieszenia. Drugim zaś kończące się paliwo.
Normalnie krzywa przyspieszenia jest to wynik charakterystyki silnika, przełożeń na poszczególnych biegach, oporu powietrza, masy całkowitej pojazdu, właściwości opon i nawierzchni, rozkładu masy na poszczególnych osiach (która się zmienia w zależności od etapu przyspieszenia)... I znowu zauważamy, że dla danego pojazdu oraz nawierzchni/warunków pogodowych są to wartości stałe. Popatrzmy jeszcze na krzywą przyspieszenia (tą w grze). Zauważymy, że można wyróżnić dla każdego biegu trzy w miarę proste odcinki. Obliczenia prędkości w znacznym stopniu przypominają te z MM, jednak za każdym razem sprawdzane jest na którym biegu znajduje się samochód oraz jaką ma prędkość i na tej podstawie z tabelki wybierana jest wartość przyspieszenia.
Zużycie benzyny jest wynikiem zapotrzebowania tego paliwa w reakcji spalania zachodzącego w cylindrze. W trakcie spalania mieszanka zaczyna się rozszerzać, zwiększa się ciśnienie, a w efekcie siła nacisku na cylinder. Teraz to jak bardzo cylinder się przemieści przy danej ilości mieszanki (benzyny z powietrzem) jest zależne od bezwładności cylindra, oporu wału korbowego, oporu przekładni skrzyni biegów, bezwładności kół, tarcia, oporu powietrza... Jak zwykle więcej czynników, niż można uwzględnić. W Lotus Esprit Turbo Challenge uprościli te zależności do... sprawdzenia czy jedziemy. W momencie gdy w tej grze nasz samochód się porusza, jest zużywana w każdej iteracji taka sama ilość paliwa (zależy ona jeszcze od wybranego modelu samochodu). Jest to absurdalne na pierwszy rzut oka, lecz sprawdza się wyśmienicie w tej grze.
Silnik oryginału :3
Lotus Esprit Turbo Challenge Jeśli film się nie wyświetla odwiedź: http://www.youtube.com/watch?v=ui8xyi0nl-k
Dziękuję za uwagę. Koniec