Bartosz Bazyluk GAME LOOP Podstawowy element silnika gry komputerowej. Programowanie Gier Komputerowych, Informatyka S1, III Rok

Podobne dokumenty
Gry Komputerowe - laboratorium 0

GRAFIKA CZASU RZECZYWISTEGO Podstawy syntezy grafiki 3D i transformacji geometrycznych

Bartosz Bazyluk OpenGL Deferred shading. Pętla główna i jej implementacje. Debugowanie i analiza wydajności.

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.

Gry Komputerowe Laboratorium 1. Zajęcia organizacyjne Animacja z uwzględnieniem czasu. mgr inż. Michał Chwesiuk 1/22. Szczecin,

Wyświetlanie obrazu Bufor klatki, synchronizacja pionowa, pętla główna gry.

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Grafika komputerowa i wizualizacja

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

Zaawansowany kurs języka Python

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010

Systemy graficzne. dr inż. Mariusz Szwoch

Problemy programowania gier. mgr Mateusz Rynk

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Programowanie współbieżne Wykład 2. Iwona Kochańska

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji.

Moc płynąca z kart graficznych

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Zaawansowane Techniki WWW (HTML, CSS i NODE.JS)

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

D O K U M E N T A C J A

Język Java część 2 (przykładowa aplikacja)

Popularne dostępne rozwiązania. Najpopularniejsze środowiska programistyczne:

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

Wykład 4. Rendering (1) Informacje podstawowe

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

Bartosz Bazyluk WPROWADZENIE Wstęp do dwuwymiarowej grafiki komputerowej.

Wykład 5. Rendering (2) Geometria

Scena 3D. Cieniowanie (ang. Shading) Scena 3D - Materia" Obliczenie koloru powierzchni (ang. Lighting)

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Zegar - układ wysyłający regularne impulsy o stałej szerokości (J) i częstotliwości (f)

Język Java część 2 (przykładowa aplikacja)

Opis efektów kształcenia dla modułu zajęć

Julia 4D - raytracing

Grafika Komputerowa Wykład 3. Wyświetlanie. mgr inż. Michał Chwesiuk 1/24

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

KARTA KURSU. Grafika komputerowa

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Architektura gier komputerowych na wybranych przykładach. Krzysztof Rosiński

Algorytmy renderingu dla programowalnych jednostek graficznych. prof. dr hab. inż. Maria Pietruszka mgr inż. Dominik Szajerman

Pętle Gry. rozwiązania dla gier realtime. Jan Darowski. 14 maja 2014

Obraz realistyczny. Realizm w grafice komputerowej. Realizm modelu: z!o#one siatki wielok$tów. Realizm modelu geometrycznego. Realizm modelu: spline'y

PRZEWODNIK PO PRZEDMIOCIE

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

PRZEWODNIK PO PRZEDMIOCIE

Janusz Ganczarski. OpenGL Pierwszy program

Projektowanie gier komputerowych. dr inż. Mariusz Szwoch

weblsp Wybór przeglądarki i jej ustawienia Instrukcja ADH-Soft sp. z o.o., ul. 17 Stycznia 74, Warszawa

Obliczenia Wysokiej Wydajności

PRZEWODNIK PO PRZEDMIOCIE

WIRTUALNE WIZUALIZACJE. Poznaj nowy wymiar wizualizacji dzięki wirtualnej rzeczywistości.

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

NAZWA PRZEDMIOTU/MODUŁU KSZTAŁCENIA:

Budowa komputera Komputer computer computare

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C

Referat Pracy Dyplomowej

Instrukcja projektowa cz. 2

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W E, 2L PRZEWODNIK PO PRZEDMIOCIE

Programowanie urządzeń mobilnych. projekt 6 ( )

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

Algorytmy dla maszyny PRAM

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

Instrukcje cykliczne (pętle) WHILE...END WHILE

Budowa systemów komputerowych

Budowa Mikrokomputera

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Plan wykładu. Akcelerator 3D Potok graficzny

Google Android. Opracował Maciej Ciurlik

PRZEWODNIK PO PRZEDMIOCIE

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

OpenGL i wprowadzenie do programowania gier

Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Nowoczesne technologie przetwarzania informacji

Analiza efektywności przetwarzania współbieżnego

Wyświetlanie obrazu Techniki wyświetlania obrazu i ich zastosowanie w grach.

rodzaj zajęć semestr 1 semestr 2 semestr 3 Razem Lp. Nazwa modułu E/Z Razem W I

GRAFIKA KOMPUTEROWA 10: Antyaliasing

Nowinki technologiczne procesorów

Programowanie procesorów graficznych GPGPU

Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015

OpenAI Gym. Adam Szczepaniak, Kamil Walkowiak

Cele RAID. RAID z ang. Redundant Array of Independent Disks, Nadmiarowa macierz niezależnych dysków.

Numeryczna algebra liniowa

Techniki animacji komputerowej

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Architektura systemów komputerowych. Przetwarzanie potokowe I

5 Moduył do wyboru II *[zobacz opis poniżej] 4 Projektowanie i konfiguracja sieci komputerowych Z

Transkrypt:

Bartosz Bazyluk GAME LOOP Podstawowy element silnika gry komputerowej Programowanie Gier Komputerowych, Informatyka S1, III Rok

INFORMACJE ORGANIZACYJNE: Prezentacje z wykładów, materiały, informacje można znaleźć na stronie internetowej: http://bazyluk.net/dydaktyka Warunkiem zaliczenia przedmiotu jest zrealizowanie zadania projektowego: gry lub silnika gry. Wspólna ocena za projekt, laboratoria i cały przedmiot Dopuszczalna jest uczciwa współpraca w grupach lub praca indywidualna Wykłady będą dotyczyły zagadnień związanych z tworzeniem od podstaw silnika gry komputerowej 27.02.14 Bartosz Bazyluk 2

TREŚĆ WYKŁADÓW: Game loop Sposoby realizacji pętli głównej Współczesny OpenGL OpenGL 3.2+, macierze przekształceń, VBO, IBO, shadery Jest to lista planowana, może jeszcze ulec zmianie zależnie od Państwa potrzeb, możliwości czasowych i innych czynników. Organizacja sceny 3D Hierarchia obiektów, architektura kodu Maszyna stanów Sposób realizacji ciągłości przebiegu interakcji z grą Podział przestrzeni świata gry Siatki, drzewa wspomagające przeszukiwanie świata Symulacja zjawisk kinetycznych w świecie gry Użycie silnika fizycznego, fizyka brył sztywnych i miękkich Optymalizacja wydajności systemu renderującego Techniki poprawy wydajności, użycie profilera 27.02.14 Bartosz Bazyluk 3

LITERATURA: Literatura podstawowa: Mike McShaffry, David Graham. "Game Coding Complete, Fourth Edition". Course Technology, 2012. Jason Gregory. "Game Engine Architecture". AK Peters, 2009. Dla osób, które zechcą zgłębić tematykę poruszaną w ramach przedmiotu. Tomas Akenine-Moller, Eric Haines, Naty Hoffman. "Real-Time Rendering, Third Edition". AK Peters, 2008. Literatura uzupełniająca: Adam Lake. "Game Programming Gems 8". Course Technology, 2011. Hubert Nguyen. "GPU Gems 3". Addison-Wesley, 2008. Eric Lengyel. "Mathematics for 3D Game Programming and Computer Graphics, Third Edition". Course Technology, 2012. Mat Buckland. "Programming Game AI by Example". Worldwide Publishing, 2005. 27.02.14 Bartosz Bazyluk 4

PLAN WYKŁADU: Game loop co to takiego? Elementy składowe: aktualizacja stanu, renderowanie Pojęcia: synchronizacja pionowa, FPS, frame time Biblioteki narzędziowe dla OpenGL GLUT, FreeGLUT, EGL, GLFW, etc. Implementacja game loop różne metody: Podejście "klasyczne" FPS zależne od stałej szybkości gry Szybkość gry zależna od FPS Stała szybkość gry i max. FPS Stała szybkość gry i max. FPS z interpolacją Podejście wielowątkowe interpolacja, predykcja, synchronizacja wątków 27.02.14 Bartosz Bazyluk 5

WPROWADZENIE: Game loop ZASADA DZIAŁANIA PROGRAMU Uproszczona różnica w najbardziej zasadniczej kwestii związanej z działaniem programów o różnym charakterze. Aplikacja użytkowa Reaguje na akcję użytkownika W pozostałym czasie nie robi nic Gra komputerowa Nieustannie aktualizuje świat gry Uwzględnia akcję użytkownika Event loop Game loop 27.02.14 Bartosz Bazyluk 6

WPROWADZENIE: Game loop Nieskończona pętla Warunkiem stopu jest wystąpienie żądania zakończenia działania programu Postać podstawowej wersji pętli: while (użytkownik nie chce wyjść) { sprawdź urządzenia wejścia; wykonaj zadania AI; przemieść przeciwników; sprawdź kolizje; renderuj świat; odtwórz dźwięki; } 27.02.14 Bartosz Bazyluk 7

WPROWADZENIE: Game loop Te pojęcia są kluczowe dla zrozumienia dalszej części wykładu! W dalszych rozważaniach przyjmiemy uproszczenie, że podstawowy game loop ma postać: while (użytkownik nie chce wyjść) { } aktualizuj stan gry; renderuj świat gry; Zatem zdefiniujmy następujące określenia: Aktualizacja stanu gry Wszystkie operacje wpływające na stan świata, wynik rozgrywki, pozycję obiektów, obsługa wejścia i zdarzeń,... Renderowanie świata gry Wybór obiektów do renderowania, wyznaczenie ich macierzy przekształceń, zlecenie renderowania karcie graficznej, zamiana buforów,... 27.02.14 Bartosz Bazyluk 8

WPROWADZENIE: Obraz wyświetlany na monitorze odpowiada Synchronizacja pionowa aktualnej zawartości front buffera. Zawartość front buffera jest: Zakładamy używanie techniki podwójnego buforowania (ang. double buffering). Front buffer jest buforem, który jest wyświetlany. Back buffer jest buforem, który aktualizuje karta. generowana przez układ graficzny konsumowana przez układ wysyłający obraz do monitora Oba procesy są niezależne. 60Hz W momencie zakończenia aktualizacji bufory są zamieniane miejscami (ang. buffer swap). Źródła zdjęć: Tech'n'Gear.com PC Arena Hungary The SEO Millionaire Aktualizacja świata Żądanie renderowania Renderowanie Wyświetlanie 27.02.14 Bartosz Bazyluk 9

WPROWADZENIE: Synchronizacja pionowa = czas renderowania jednej klatki = wyświetlenie zawartości front buffera Przebieg czasowy renderowania klatek w przypadku wyłączonej i włączonej synchronizacji pionowej. VSync Off VSync On (sleep) (sleep) 1/60s 1/60s czas 27.02.14 Bartosz Bazyluk 10

WPROWADZENIE: Synchronizacja pionowa VSync On With double-buffering VSync Off No double-buffering Porównanie kolejnych klatek wyświetlonych na monitorze. Brak synchronizacji i podwójnego buforowania powoduje powstanie efektu tearing: wyświetlony obraz składa się z kilku klatek. 27.02.14 Bartosz Bazyluk 11

WPROWADZENIE: Pomiar wydajności działania gry Wpływ na wydajność potoku renderującego ma bardzo wiele czynników. Renderowanie 10.000 wielokątów nie jest dwa razy szybsze niż renderowanie 20.000. Cząstkowy pomiar czasu (np. rysowania jednego obiektu) jest niemiarodajny kolejkowanie, buforowanie, etc. w karcie graficznej Wartościowy jest pomiar czasu pomiędzy kolejnymi momentami zamiany buforów (buffer swap) niewiele mówi przy włączonej synchronizacji pionowej Liczba klatek na sekundę (ang. frames per second, FPS) miara nieliniowa Spadek liczby FPS z 900 do 450 jest tym samym, co z 60 do 56.25! Czas klatki (ang. frame time) miara liniowa Mierzymy zawsze z wyłączoną synchronizacją pionową! Więcej na ten temat: http://www.opengl.org/wiki/performance http://www.mvps.org/directx/articles/fps_versus_frame_time.htm 27.02.14 Bartosz Bazyluk 12

BIBLIOTEKI: Pozwala szybko przejść do sedna GL Utility Toolkit (GLUT) Łatwo się nauczyć Pomija się przy okazji wiele istotnych kwestii Odpowiedni do: Ostatnia wersja pochodzi z... 1996 roku! Nie zalecana. Szybkiego prototypowania Prostych demonstracji Problemy: Niekonfigurowalna, narzucona implementacja game loop Zamknięcie okna równoznaczne z zakończeniem programu Nieprzystosowany do nowego OpenGL Nie jest open source => nie ma dalszego rozwoju Witryna projektu: http://www.opengl.org/resources/libraries/glut/ 27.02.14 Bartosz Bazyluk 13

BIBLIOTEKI: Open-source'owy klon GLUTa freeglut Kompatybilny z API GLUT Zazwyczaj wystarczy podmienić DLL-kę Pozwala na: Autorem pierwszych wersji jest Polak, Paweł Olszta. tworzenie własnej implementacji game loop wybór profilu kontekstu OpenGL Ciężki, cierpi z powodu przywiązania do API GLUT Witryna projektu: http://sourceforge.net/projects/freeglut/ 27.02.14 Bartosz Bazyluk 14

BIBLIOTEKI: Open-source'owa alternatywa GLFW Ma za zadanie dostarczać tylko podstawowej funkcjonalności, zostawiając dużą dowolność Lekka i prosta w użyciu Ciągle rozwijana, lekka alternatywa. Będzie wykorzystywana w dalszych przykładach. Możliwa własna implementacja game loop Pełna kontrola nad istotnymi elementami Wsparcie dla wielowątkowości Witryna projektu: http://www.glfw.org/ 27.02.14 Bartosz Bazyluk 15

BIBLIOTEKI: API rozwijane przez Khronos Group EGL Najczęściej można się spotkać przy programowaniu na Androida To nie jest biblioteka, implementację dostarczają twórcy sprzętu/systemu/etc. Najpopularniejsze podejście przy programowaniu na Androida Składania i podejście zbliżone do samego OpenGL Witryna projektu: http://www.khronos.org/egl/ 27.02.14 Bartosz Bazyluk 16

BIBLIOTEKI: Simple DirectMedia Layer (SDL) Inne przykłady http://www.libsdl.org Simple and Fast Multimedia Library (SFML) http://www.sfml-dev.org OpenGLUT http://openglut.sourceforge.org Bez biblioteki, bezpośrednie odwołania do systemu 27.02.14 Bartosz Bazyluk 17

IMPLEMENTACJA: Wprowadzenie Za przykład do analizy posłuży nam prosty, obracający się sześcian. Kod przykładu jest uproszczony i celowo korzysta z archaicznego immediate mode. Kody źródłowe dostępne na: http://bazyluk.net/dydaktyka 27.02.14 Bartosz Bazyluk 18

IMPLEMENTACJA: Najprostsza forma: Podstawowy game loop Aktualizacja występuje ze stałym krokiem. Absolutnie nie jest to podejście zalecane! while (użytkownik nie chce wyjść) { } aktualizuj stan gry; renderuj świat gry; Zalety: Prostota (?) Problemy: Szybkość rozgrywki zależna od wydajności sprzętu Szybkość rozgrywki może się zmieniać w trakcie gry 27.02.14 Bartosz Bazyluk 19

IMPLEMENTACJA: Określamy, co ile czasu ma wykonać się aktualizacja Stała szybkość gry Podejście może być korzystne w przypadku gier na urządzenia mobilne. Może bowiem redukować zużycie energii. stanu gry. Każda aktualizacja stanu zawsze oznacza następujące po nim renderowanie obrazu. Zalety: Stałe tempo gry (o ile wystarczający sprzęt) Oszczędność baterii Problemy: Sprzęt nie daje rady osiągnąć tyle FPS => gra zwalnia. Wydajny sprzęt => i tak mamy tyle FPS, co update'ów. 27.02.14 Bartosz Bazyluk 20

IMPLEMENTACJA: Pozwalamy na renderowanie tak szybko, jak to jest Szybkość gry uzależniona od FPS Podejście na pierwszy rzut oka bardzo dobre, ale ma istotne słabe strony. możliwe. Każdemu renderowaniu towarzyszy aktualizacja stanu ze zmiennym krokiem. Zalety: Maksymalna liczba FPS Problemy: Nieprzewidywalność rozgrywki Konieczność aktualizacji zależnej od zmiennego czynnika 27.02.14 Bartosz Bazyluk 21

IMPLEMENTACJA: Rozwinięcie koncepcji stałego kroku aktualizacji Stała szybkość gry i maksimum FPS Podejście w podstawowej postaci prowadzi do marnowania mocy obliczeniowej. Jeśli mamy jeszcze czas do zaplanowanej, następnej aktualizacji, to renderujemy dodatkową klatkę. Jeśli mamy opóźnienie, to wykonujemy dodatkową aktualizację ze stałym krokiem żeby nadrobić stratę. Zalety: Rozwiązuje problem wpływu długiego czasu renderowania na częstotliwość aktualizacji. Eliminuje zbędne oczekiwanie (czasem to minus). Problemy: Jeśli mamy odpowiednio wydajny sprzęt, renderujemy wiele takich samych klatek. 27.02.14 Bartosz Bazyluk 22

IMPLEMENTACJA: Aby nie renderować identycznych klatek pomiędzy Stała szybkość gry i maksimum FPS + interpolacja aktualizacjami, można dokonać interpolacji. Wprowadza opóźnienie o wielkości jednego cyklu. Innym, pokrewnym podejściem jest predykcja. Podejście zalecane dla jednowątkowej architektury. Szczególnie dla wartości kontrolowanych przez gracza może wywołać niepożądane efekty. Zalety: Stały krok aktualizacji, maksimum FPS. Każda klatka jest inna. Problemy: Nieznaczne opóźnienie. 27.02.14 Bartosz Bazyluk 23

IMPLEMENTACJA: Rozdzielenie aktualizacji i renderowania Zrównoleglony game loop na dwa osobne wątki, które mogą być wykonywane równolegle przez np. procesor wielordzeniowy. Konieczne jest korzystanie z interpolacji bądź predykcji. Zalety: Współbieżne renderowanie i aktualizacja, niezależne od siebie. Stały krok aktualizacji i maksymalna liczba FPS. Problemy: Konieczność uważnego planowania architektury silnika. 27.02.14 Bartosz Bazyluk 24

IMPLEMENTACJA: Jeden kontekst OpenGL może w danym momencie Wielowątkowość w grach możliwości i problemy być używany tylko przez jeden wątek. Komunikacja CPU -> karta graficzna nie może być traktowana jako możliwa do zrównoleglenia. Nie warto uciekać od wielowątkowości w nowoczesnych silnikach. Współczesny sprzęt daje ogromne możliwości. Należy je wykorzystać. Można stworzyć kilka kontekstów, które współdzielą dane nie jest to jednak podejście wydajne ani zalecane. Inne możliwości wykorzystania wielowątkowości: Odczyt tekstur i zasobów z dysku odbywający się "w tle". Dysk nie jest urządzeniem pozwalającym na odczyt równoległy (z wyłączeniem macierzy dyskowych)! Wydajna, zrównoleglona aktualizacja stanu: Obliczenia AI podzielone na kilka wątków. Symulacja fizyki. Systemy cząsteczkowe. Odtwarzanie dźwięku. 27.02.14 Bartosz Bazyluk 25

Bartosz Bazyluk GAME LOOP Podstawowy element silnika gry komputerowej Programowanie Gier Komputerowych, Informatyka S1, III Rok