Proces realizacji gry Silnik gry Michał Drobot
Plan wykładu Funkcjonowanie silnika gry
Funkcjonowanie silnika gry Input: Mysz, Klawiatura… Fizyka, Logika, Obsługa sieci Video, Audio Main Loop : 15 – 30 ms (30 / 60 fps) Czyszczenie Stanu gry
Funkcjonowanie silnika gry Main loop Pojedynczy obieg gry Musi się wykonać na komputerze klienta w czasie 30/60 fps Wystarczy wykonać operacje wymagane do pokazania odbiorcy nowej klatki obrazu Pozostałe zadania mogą ‘maskować’ się w pomiędzy klatkami Model synchroniczny / asynchroniczny Musi dbać o czas reakcji Działań użytkownika Działań użytkowników sieciowych NPC Fizyki
Funkcjonowanie silnika gry Main loop Przetwarzanie i łączenie assetów Modele Tekstury Shadery Audio Skrypty Animacje …
Funkcjonowanie silnika gry Architektura gry Game Application Layer (warstwa aplikacji gry) Widok Gry Widok Gry Widok Gry Logika Gry Widok Gry
Funkcjonowanie silnika gry GAL Warstwa niskopoziomowa Stanowi warstwę komunikacji ze sprzętem Wymienialna w zależności od platformy Wysokowydajnościowa Obsługuje Video, Audio Zarządzanie zasobami systemowymi Zadania wymagające najwyższej wydajności Fizyka ze wsparciem sprzętowym
Funkcjonowanie silnika gry GAL Wykorzystuje specyficzne zalety danej platformy SPU – PS3 GPU – X360 Jest hermetycznym elementem silnika gry Zmiany nie wpływają na inne elementy W zależności od skomplikowania założeń gry i platformy może dojść do współzależności Gry na X360 , Ps3, Wii Znaczące różnice w logice gry względem sterowania
Funkcjonowanie silnika gry GAL Warstwa aplikacji gry Urządzenia System Operacyjny Czas Gry Input Pliki RAM Język DLL Watki Libs Main Loop Init
Funkcjonowanie silnika gry Logika Gry Opiera się na systemie przetwarzania skryptów Nie wymaga dużej wydajności Poza rozwiązaniami AI, które mogą być wspomagane przez GAL AI prosi o wsparcie obliczeniowe, GAL decyduje w zależności od platformy jak udzieli wsparcia (PS3 – SPU, X360 – GPU) Zwykle pozostaje bez zmian względem platformy
Funkcjonowanie silnika gry Logika Gry Warstwa logiki gry Stan gry Struktury danych Fizyka Zdarzenia Zarządzanie Procesami Interpreter komend
Funkcjonowanie silnika gry Logika Gry Stan gry Opisuje aktualny stan świata gry Zawiera opis wszystkich obiektów i ich stanu Parametry dotyczące każdego obiektu położenie, orientacja, właściwości Zawiera możliwe predykcje względem przyszłych wydarzeń w świecie gry jak i zachowań gracza AI, Fizyka… Musi być reprezentowany przez szybką jak i pojemną strukturę danych
Funkcjonowanie silnika gry Logika Gry Struktury danych Służą do zapisu danych dotyczących stanu gry Używamy różnych struktur w zależności od wymagań Gry sieciowe – pakiety upakowane Drzewo świata – wskaźniki Drzewa fizyki… Muszą spełniać zależność szybkości/funkcjonalności względem obiektu i częstości odwołań do niego Float 10 – bitowy dla odległości między AI :>
Funkcjonowanie silnika gry Logika Gry Fizyka Z racji komunikacji z logiką gry często łączone Wraz ze wzrostem działań równoległych oddzielana jako osobny komponent Wymaga dużej wydajności, optymalizacji pod sprzęt itp.. Często fizyka wydziela osobną warstwę, skróconą, uproszczoną i szybszą do reprezentowania świata Modele kolizji Modele kompresowane, cacheowane, fizyczne itp…
Funkcjonowanie silnika gry Logika Gry Zdarzenia System obsługi wiadomości w świecie gry Obsługuje wywołania zdarzeń Obsługa może przebiegać globalnie (np.. międzywątkowo) bądź lokalnie (np.. na poziomie systemu dźwięku) Stanowi łącznik między widokiem gry a GAL Np.. Machnięcie Wii’Motem odczytuje system zdarzeń i powiadamia GAL o potrzebie wygenerowania odpowiedniego dźwięku i efektu graficznego
Funkcjonowanie silnika gry Logika Gry Procesy System obsługi procesów w grze Wydziela czas CPU dla każdej funkcji jaka powinna się wykonać Decyduje o kolejności wykonywanych procesów Może zarządzać skryptami Np.. „szukanie apteczki” kolejno uruchamia Przeszukiwanie grafu mapy Wybranie najlepszej apteczki (odległość, moc) Wysłanie decyzji o ruszeniu AI w kierunku wybranej apteczki
Funkcjonowanie silnika gry Logika Gry Interpreter komend Przetwarza komendy zewnętrzne na język zrozumiały dla logiki Stanowi warstwę komunikacji między niskopoziomową logiką a użytkownikiem Utworzenie wspólnego, współdzielonego interfejsu dla logiki gry ułatwia Debugging Tweakowanie parametrów w czasie rzeczywistym Obsługę skryptów przez nie-programistów Rozszerzanie gry
Funkcjonowanie silnika gry Logika Gry Interpreter komend Pod względem kompleksowości rozwiązania Prosta konsola eksponująca parametry i funkcje logiki System języka świata gry Język skryptowy do sterowania logiką Wspólny język oraz interfejs Obsługa świata gry równouprawniona z poziomu użytkownika, AI, graczy sieciowych
Funkcjonowanie silnika gry Widok gry Prezentuje stan gry Decyduje o tym co pokazać lub jak przedstawić Istnieje wiele widoków Widok gracza Decyduje o tym jak przedstawić świat gry od strony Audio/Video, odpowiada za przesłanie danych użytkownik – system do gry Widok gracza sieciowego Widok AI Przedstawia konkretne struktury świata gry wymagane dla AI do działania
Funkcjonowanie silnika gry Widok gry Widok gry Wyświetlanie Audio Input Opcje 3D UI Video SFX Muzyka Speech Procesy
Funkcjonowanie silnika gry Widok gry PAD Widok gracza Logika Wciśnięcie A Wciśnięcie hamulca Stan pojazdu: wciśnięty hamulec poślizg Puszczenie A
Funkcjonowanie silnika gry Architektura sieciowa Server Widok gracza Stan gry i polecenia Logika Zdalny widok gracza Stan gry i polecenia Klient Internet Widok gracza Logika Stan gry i polecenia
Funkcjonowanie silnika gry System renderingu Assety Geometry Processing Pixel Processing Frame Processing Modele 3D Model Poddany Transfor- macjom Narysowany Pixel Wg Vertexów Klatka obrazu Animacje Tekstury Shadery
hello@drobot.org michal.drobot@ega.org.pl Pytania ? hello@drobot.org michal.drobot@ega.org.pl