Jakie są konkretne matematyki, fizyki, sztucznej inteligencji i ogólne pojęcia, które programista powinien znać, aby opracować silnik gry? [Zamknięte]

9

Będąc programistą aplikacji internetowych i bazujących na DB, mam wiedzę na temat struktur danych, takich jak listy, drzewa, wykresy itp. Szczerze mówiąc, bardzo mało z tych algorytmów struktury danych używam do kodowania, z wyjątkiem sortowania rzeczy w prostych tablicach, ponieważ działał prawie całkowicie z frameworkami zorientowanymi na klienta, w których wbudowano wszystkie podstawowe funkcje. Znam C, PHP, Java, HTML, PL / SQL i MySQL. Obecnie uczę się języka Python.

Chcę zacząć od tworzenia gier. Widziałem inne pytania dotyczące sugestii, wskazówek i podejść do tworzenia gier dla początkujących. Rozumiem te kwestie i udzielam jasnych odpowiedzi. Kilka dni po opublikowaniu przeczytałem artykuł Pisanie gier, a nie silników i zdałem sobie sprawę, że powinienem wdrożyć grę, zanim utworzę silnik gry. Nadal mam pytania.

Moim celem jest

  • Popraw swoje podstawowe umiejętności programowania na poziomie podstawowym, w tym za pomocą algorytmów struktury danych, matematyki i fizyki.
  • Zaimplementuj dobry silnik gry, aby pozwolić sobie na kodowanie na poziomie podstawowym.
  • Aby utorować sobie drogę do pola badawczego AI.

Jakie są konkretne matematyki, fizyki, sztucznej inteligencji i ogólne pojęcia, które programista powinien znać, aby opracować silnik gry?

droidy
źródło

Odpowiedzi:

11

Struktury danych: To z pewnością ważne pytanie. Jednak chociaż niektóre struktury danych są przydatne w każdej grze (jak te, o których już wspomniałeś, Listy, Drzewa ...), istnieją inne, które są bardzo specyficzne. Na przykład Octrees mogą być bardzo przydatne w programowaniu 3D, ale w czystym środowisku 2D prawdopodobnie nie będziesz ich potrzebować.

Algorytmy : obowiązuje ta sama zasada. Przykład: w czystym środowisku 2D wykrywanie kolizji działa zupełnie inaczej niż w 3D.

Ważne obszary matematyczne: NAJWAŻNIEJSZY obszar, na którym twórca silnika powinien się zapoznać, to algebra liniowa i bardziej zaawansowane tematy algebry (czwartorzędy). Całkiem proste, jeśli czujesz się komfortowo z Algebrą Liniową (a mam na myśli poza zwykłym mnożeniem Matrycy), to dobrze zacząć.

Następna jest geometria, która i tak dobrze łączy się z algebrą liniową w Engine Dev i prawdopodobnie i tak nie potrzebuje żadnej wzmianki.

Co więcej, nigdy nie boli solidne zrozumienie rachunku podstawowego. Przydaje się to w przypadku silnika fizyki lub bardziej zaawansowanych tematów cieniowania.

Inne interesujące tematy to: Kombinatoryka, statystyka

Fizyka: To nie jest obowiązkowe, JEŚLI zamierzasz tworzyć proste gry. Nie boli, ale w tym przypadku poradzisz sobie z fizyką w szkole średniej.

Jeśli myślisz o napisaniu silnika fizyki lub implementacji istniejącej architektury, to tak, jest to obowiązkowe. Ale nie obawiaj się, istnieje wiele książek o fizyce napisanych specjalnie dla Game-Devs. Pamiętaj, przeczytaj je ZANIM zaczniesz kodować grę z fizyką. Jeśli twoja gra powinna mieć fizykę, te Silniki będą ściśle powiązane z twoją podstawową architekturą.

AI: Szczerze mówiąc, jeśli AI jest twoim głównym zainteresowaniem, nie zawracałbym sobie głowy pisaniem całego silnika. AI jest o wiele przyjemniejsze, gdy masz do dyspozycji istniejącą architekturę. Pisanie silnika będzie uciążliwe i potrwa dość długo, dopóki nie będziesz w stanie wdrożyć zabawnych algorytmów AI.

Jaki rodzaj gry chcesz rozwijać? Być może z tymi informacjami mogę rozwinąć więcej na temat tych punktów.

Michael Kissner
źródło
Dziękuję za twoją wyszukaną odpowiedź. Jako odpowiedź na twoje pytanie .. cóż, w tej chwili nie mam pojęcia w głowie, ale chcę opracować silnik gry 3D. Ale pomyśl, aby zacząć od gry 2D i poznać środowisko. Przed tym wszystkim powinienem zagrać w kilka gier, aby poznać ich wygląd (ponieważ nigdy nie grałem w gry wideo :-)). Aby łatwo było mi zrozumieć terminologię książek i inne rzeczy. Znalazłem poniżej bardzo pomocne,
droidsites
przepraszam, brakowało mi linku w poprzednim komentarzu: gamedev.stackexchange.com/questions/8502/...
droidsites
W przeszłości zalecałbym, aby zacząć od gier 2D, jeśli chcesz tworzyć gry 3D. Jednak wraz z powstaniem Architektury, takiej jak XNA, uważam, że fajniej jest nurkować bezpośrednio w 3D. Czy już rzuciłeś okiem na C # / XNA? Nie powinno to stanowić problemu, biorąc pod uwagę twoje przygotowanie programistyczne
Michael Kissner
Nie, nie sprawdziłem tego. Tak ... to nie jest problem, aby przejść do C #. Ale jestem bardzo zainteresowany
pythonem
Jeśli interesuje Cię Python i bardziej jesteś zainteresowany budowaniem gry niż budowaniem technologii do budowania gry, możesz sprawdzić Panda3D lub silnik gry Blender.
Sean Middleditch
1

Chociaż może być właściwe pytanie, które struktury danych są najczęściej używane w tworzeniu gier, o wiele bardziej trafne jest pytanie, które struktury danych są używane w przypadku konkretnych problemów. Mogę z łatwością stwierdzić, że tabele skrótów są bardzo powszechne w grach, ale nie powiedziałoby to nic przydatnego, jeśli chodzi o to, kiedy i gdzie używać (i nie używać!) Tabeli skrótów we własnym kodzie. :)

Jeśli chodzi o matematykę, musisz bardzo dobrze rozumieć algebrę liniową (wektory, macierze, rozwiązywanie układów liniowych itp.), Bardzo dobrze rozumieć trygonometrię i co najmniej podstawową znajomość rachunku różniczkowego (proste pochodne i całkowanie) . Każdy wstępny kurs algebry liniowej na poziomie uczelni powinien postawić cię na właściwej ścieżce, jeśli nie nauczy Cię wszystkiego, co musisz wiedzieć, aby rozpocząć pracę z powszechnymi zasadami grafiki 3D. Łączę też książkę, poniżej której możesz się okazać bardzo pomocny.

Jeśli chodzi o fizykę, czeka cię przejażdżka. Fizykę można podzielić na dwie różne kategorie: wykrywanie kolizji i reakcja na kolizję. Musisz bezwzględnie znać matematykę związaną z wykrywaniem kolizji, ponieważ matematyka jest mniej więcej identyczna z tym, co musisz zrobić w grafice (szczególnie do budowania drzew i map potrzebnych do okluzji), i będziesz używać tych rzeczy do dużo twojej logiki.

Reakcja na zderzenie może być różna, od „prostych” do absurdalnych poziomów zawiłości, a nawet proste rzeczy mogą początkowo nie być intuicyjne. Gorąco polecam pozostawienie tych rzeczy w istniejącej bibliotece, takiej jak Bullet, Havok, PhysX itp. (Lub Box2D, jeśli pracujesz nad grą 2D), dopóki nie poczujesz się komfortowo z istniejącą matematyką i algorytmem wiedzę i zdecyduj, że chcesz się dowiedzieć, jak działają silniki fizyki. Poleciłbym wtedy zbudować bardzo prosty silnik fizyki 2D jako pierwszą próbę. Silniki fizyki 3D są niesamowicie złożonymi zwierzętami i są (prawdopodobnie) najbardziej skomplikowaną i trudną częścią programowania gier, dlatego silniki fizyki są najczęściej licencjonowanymi technologiami innych firm wykorzystywanymi w grach. Po prostu nie widzisz zbyt wielu gier, które nie są • Używanie Havok lub PhysX w profesjonalnym świecie, pomimo tego, ile gier ma od podstaw własne silniki graficzne i podstawowy kod silnika. Nawet firmy, które nie robią nic poza tworzeniem silników do gier, zwykle licencjonują silnik fizyki, np. Unreal używa po prostu PhysX zamiast własnego silnika fizyki.

Polecam następujące książki na początek. Pierwsza to książka wprowadzająca na temat podstawowej matematyki, którą musisz znać jako programista gier 3D:

http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869

Drugi to książka wykrywająca algorytmy wykrywania kolizji (nie reakcja na kolizję!), Które pomogą zarówno w kodowaniu grafiki, jak i kodowaniu fizyki:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323

Sean Middleditch
źródło