diff --git a/latex/main.app b/latex/main.app index 560559f..68966f3 100644 --- a/latex/main.app +++ b/latex/main.app @@ -1,2 +1,2 @@ -\contentsline {subsection}{\hspace *{-1.1em}1.\hspace *{0.5em} Nazwa załącznika 1}{87}{section*.131}% -\contentsline {subsection}{\hspace *{-1.1em}2.\hspace *{0.5em} Nazwa załącznika 2}{89}{section*.133}% +\contentsline {subsection}{\hspace *{-1.1em}1.\hspace *{0.5em} Nazwa załącznika 1}{87}{section*.132}% +\contentsline {subsection}{\hspace *{-1.1em}2.\hspace *{0.5em} Nazwa załącznika 2}{89}{section*.134}% diff --git a/latex/main.pdf b/latex/main.pdf index 1059314..24918ac 100644 Binary files a/latex/main.pdf and b/latex/main.pdf differ diff --git a/latex/tex/3-silniki-gier.tex b/latex/tex/3-silniki-gier.tex index 2f8ba9d..2c95d78 100644 --- a/latex/tex/3-silniki-gier.tex +++ b/latex/tex/3-silniki-gier.tex @@ -161,8 +161,7 @@ Unreal Editor oferuje rozbudowane środowisko deweloperskie: \end{itemize} \subsection{Porównanie architektoniczne} -\FloatBarrier -\begin{table}[H!] +\begin{table}[H] \centering \caption{Porównanie kluczowych cech Unity i Unreal Engine} \label{tab:unity-vs-unreal} @@ -180,8 +179,6 @@ Natywne wsparcie 2D & Tak & Nie (symulowane) \\ \hline Kod źródłowy & Częściowo dostępny & Pełny dostęp \\ \hline -Rozmiar pustego projektu & $\sim$100 MB & $\sim$1-2 GB \\ -\hline Główne zastosowania & Mobile, indie, 2D & AAA, FPS, 3D \\ \hline \end{tabular} @@ -191,7 +188,10 @@ Główne zastosowania & Mobile, indie, 2D & AAA, FPS, 3D \\ Wybór Unity i Unreal Engine jako przedmiotu porównania pozwala na analizę dwóch fundamentalnie różnych podejść do tworzenia gier: -Motywacja wyboru: Unity i Unreal Engine pozostają dwoma najpopularniejszymi silnikami używanymi w większości nowoczesnych produkcji — zarówno w segmencie indie, jak i w grach AAA — co czyni ich porównanie reprezentatywnym dla współczesnego rynku gier \cite{vgi2025engines,g2gameengines}. +Motywacja wyboru: Unity i Unreal Engine pozostają dwoma najpopularniejszymi silnikami +używanymi w większości nowoczesnych produkcji — zarówno w segmencie indie, jak i w +grach AAA — co czyni ich porównanie reprezentatywnym dla współczesnego rynku gier +\cite{vgi2025engines,g2gameengines}. Wybór Unity i Unreal Engine jako przedmiotu porównania pozwala na analizę dwóch fundamentalnie różnych podejść do tworzenia gier: @@ -209,4 +209,6 @@ analizę dwóch fundamentalnie różnych podejść do tworzenia gier: oferuje bardziej zintegrowane rozwiązania \end{enumerate} -Analiza tych dwóch silników dostarcza kompleksowego obrazu współczesnego stanu technologii do tworzenia gier i pozwala na sformułowanie praktycznych rekomendacji dla deweloperów. +Analiza tych dwóch silników dostarcza kompleksowego obrazu współczesnego stanu +technologii do tworzenia gier i pozwala na sformułowanie praktycznych rekomendacji dla +deweloperów. diff --git a/latex/tex/4-metodologia.tex b/latex/tex/4-metodologia.tex index 2d0edc4..91ab3d8 100644 --- a/latex/tex/4-metodologia.tex +++ b/latex/tex/4-metodologia.tex @@ -6,39 +6,27 @@ Głównym celem badań jest porównanie wydajności i możliwości wybranych silników gier. -\subsubsection{Hipotezy badawcze} -\begin{enumerate} - \item Silniki komercyjne oferują lepszą wydajność niż rozwiązania open source - \item Kompleksowość funkcjonalności wpływa negatywnie na wydajność - \item Łatwość użycia jest odwrotnie proporcjonalna do możliwości konfiguracji -\end{enumerate} +\subsubsection{Hipoteza badawcza} +Silnik Unity, dzięki natywnemu wsparciu dla grafiki 2D, osiągnie lepszą +wydajność w~grze typu \emph{bullet hell} niż Unreal Engine, który jest +zoptymalizowany przede wszystkim pod kątem aplikacji 3D. \subsection{Kryteria porównania} -\subsubsection{Wydajność} -\begin{itemize} - \item Szybkość renderowania (FPS) - \item Zużycie pamięci RAM - \item Obciążenie procesora - \item Zużycie pamięci karty graficznej - \item Czas ładowania scen -\end{itemize} -\subsubsection{Funkcjonalność} -\begin{itemize} - \item Wsparcie dla różnych typów renderingu - \item Systemy fizyki - \item Systemy audio - \item Wsparcie dla VR/AR - \item Możliwości skryptowania -\end{itemize} +W ramach testów wydajnościowych analizowano następujące metryki, zbierane +za pomocą narzędzia NVIDIA Nsight Systems: -\subsubsection{Użyteczność} \begin{itemize} - \item Intuicyjność interfejsu - \item Jakość dokumentacji - \item Dostępność tutoriali - \item Wsparcie społeczności - \item Czas potrzebny na naukę + \item \textbf{Czas klatki} (ang. \emph{frame time}) -- czas potrzebny + na wyrenderowanie pojedynczej klatki, wyrażony w~milisekundach + \item \textbf{Liczba klatek na sekundę} (FPS) -- wartość pochodna + od czasu klatki, kluczowa dla płynności rozgrywki + \item \textbf{Wykorzystanie GPU} -- procentowe obciążenie karty graficznej, + mierzone poprzez liczniki sprzętowe NVIDIA + \item \textbf{Wywołania Vulkan API} -- szczegółowa analiza wywołań + interfejsu graficznego, w~tym funkcji synchronizacji i~prezentacji + \item \textbf{Wywołania systemowe} -- analiza mechanizmów wielowątkowości + i~synchronizacji na poziomie systemu operacyjnego \end{itemize} \subsection{Środowisko testowe} @@ -69,88 +57,84 @@ W badaniach wykorzystano następujące wersje oprogramowania: \item \textbf{NVIDIA Nsight Systems}: 2025.5.2 \end{itemize} -Wybór wersji LTS silnika Unity podyktowany był stabilnością oraz długoterminowym wsparciem, co jest istotne z punktu widzenia powtarzalności badań. W przypadku Unreal Engine wybrano najnowszą dostępną wersję stabilną w momencie rozpoczęcia badań. - -\subsubsection{Konfiguracja testowa} -\label{subsubsec:konfiguracja-testowa} - -Przed wykonaniem każdego testu zastosowano następującą procedurę przygotowawczą: -\begin{enumerate} - \item Zamknięto wszystkie aplikacje działające w tle - \item Wyłączono automatyczne aktualizacje systemu - \item Ustawiono tryb wydajności zasilania (performance mode) - \item Odczekano 5 minut na stabilizację termiczną systemu - \item Wykonano 3 pomiary dla każdego scenariusza testowego, z których obliczono wartość średnią -\end{enumerate} +Wybór wersji LTS silnika Unity podyktowany był stabilnością oraz długoterminowym wsparciem, +co jest istotne z punktu widzenia powtarzalności badań. W przypadku Unreal Engine +wybrano najnowszą dostępną wersję stabilną w momencie rozpoczęcia badań. \subsection{Projekt testów} \subsubsection{Gra testowa typu \emph{bullet hell}} \label{subsubsec:gra-testowa} -Na potrzeby badań porównawczych zaimplementowano identyczną grę w gatunku \emph{bullet hell} w obu silnikach. Gra charakteryzuje się następującymi cechami: +Na potrzeby badań porównawczych zaimplementowano identyczną grę w gatunku +\emph{bullet hell} w obu silnikach. Gra charakteryzuje się następującymi cechami: \begin{itemize} - \item Sterowany przez gracza statek kosmiczny + \item Sterowana przez gracza postać \item System generowania przeciwników z progresywnie rosnącym obciążeniem \item Generowanie wzorców pocisków \item Wykrywanie kolizji między obiektami \item Tryb przetrwania trwający 90 sekund \end{itemize} -Wybór gatunku \emph{bullet hell} podyktowany był możliwością generowania dużej liczby obiektów na ekranie (pociski, przeciwnicy, efekty wizualne), co pozwala na skuteczne obciążenie silnika graficznego i zbadanie jego wydajności w warunkach ekstremalnych. +Wybór gatunku \emph{bullet hell} podyktowany był możliwością generowania dużej +liczby obiektów na ekranie (pociski, przeciwnicy, efekty wizualne), co +pozwala na skuteczne obciążenie silnika graficznego. \subsubsection{Fazy obciążenia} \label{subsubsec:fazy-obciazenia} -Gra testowa została zaprojektowana tak, aby w ciągu 90 sekund rozgrywki przechodziła przez trzy fazy o różnym poziomie obciążenia: +Gra testowa została zaprojektowana tak, aby w~ciągu 90 sekund rozgrywki +progresywnie zwiększała obciążenie poprzez: -\paragraph{Faza 1: Niskie obciążenie (0--30 sekund)} \begin{itemize} - \item Liczba pocisków na ekranie: 50--100 - \item Aktywni przeciwnicy: 2--3 - \item Oczekiwana stabilna liczba klatek: 60 FPS - \item Oczekiwane wykorzystanie GPU: poniżej 50\% + \item \textbf{Przyspieszanie spawnu przeciwników} -- interwał między + spawnem zmniejsza się liniowo od 0,25~s (początek) do 0,08~s (koniec), + z~dodatkowym ,,finalnym szturmem'' przez ostatnie 5~sekund + \item \textbf{Zwiększanie różnorodności typów przeciwników} -- początkowo + (0--25\% czasu) pojawiają się tylko podstawowi przeciwnicy, później + wprowadzane są kolejno szybsze jednostki (25--50\%), strzelające wieżyczki + (50--75\%) oraz wytrzymałe czołgi (75--100\%) + \item \textbf{Maksymalna liczba przeciwników} -- limit jednoczesnych + przeciwników na scenie wynosi 200 jednostek \end{itemize} -\paragraph{Faza 2: Średnie obciążenie (30--60 sekund)} -\begin{itemize} - \item Liczba pocisków na ekranie: 200--300 - \item Aktywni przeciwnicy: 5--7 - \item Oczekiwane wykorzystanie GPU: 50--70\% - \item Możliwe niewielkie spadki liczby klatek -\end{itemize} +Na potrzeby profilowania rozgrywka została podzielona na trzy fazy czasowe: -\paragraph{Faza 3: Wysokie obciążenie (60--90 sekund)} -\begin{itemize} - \item Liczba pocisków na ekranie: ponad 500 - \item Aktywni przeciwnicy: ponad 10 - \item Oczekiwane wykorzystanie GPU: powyżej 70\% - \item Potencjalne znaczące spadki liczby klatek -\end{itemize} +\paragraph{Faza 1 (0--30 sekund)} +Początkowa faza z~niskim obciążeniem. Spawner generuje wyłącznie podstawowych +przeciwników (\emph{Fodder}) z~interwałem ok.~0,25~s. -\subsubsection{Metryki i wskaźniki} -\label{subsubsec:metryki} +\paragraph{Faza 2 (30--60 sekund)} +Średnie obciążenie. Wprowadzane są szybsze przeciwnicy (\emph{Runner}), +interwał spawnu zmniejsza się do ok.~0,17~s. -W ramach testów wydajnościowych mierzono następujące parametry: - -\begin{enumerate} - \item \textbf{Czas klatki} (ang. \emph{frame time}) -- czas potrzebny na wyrenderowanie pojedynczej klatki, wyrażony w milisekundach - \item \textbf{Liczba klatek na sekundę} (FPS) -- wartość pochodna od czasu klatki - \item \textbf{Wykorzystanie GPU} -- procentowe obciążenie karty graficznej - \item \textbf{Zużycie pamięci} -- pamięć VRAM oraz RAM wykorzystywana przez aplikację - \item \textbf{Liczba wywołań rysowania} (ang. \emph{draw calls}) -- liczba wywołań API graficznego na klatkę - \item \textbf{Liczba wierzchołków} -- całkowita liczba wierzchołków renderowanych na klatkę -\end{enumerate} +\paragraph{Faza 3 (60--90 sekund)} +Wysokie obciążenie. Wszystkie typy przeciwników (w~tym strzelające \emph{Turret} +i~wytrzymałe \emph{Tank}), interwał spawnu osiąga minimum 0,08~s. +Ostatnie 5~sekund to ,,finalny szturm'' z~maksymalną intensywnością. \subsubsection{Procedura zbierania danych} \label{subsubsec:procedura-zbierania} -Dla każdego silnika przeprowadzono trzy pełne przebiegi gry (90 sekund każdy), co dało łącznie 6 sesji pomiarowych. Narzędzie NVIDIA Nsight Systems rejestrowało dane wydajnościowe przez cały czas trwania rozgrywki, umożliwiając późniejszą analizę poszczególnych faz obciążenia. +Przeprowadzono cztery sesje pomiarowe -- po dwie dla każdego silnika: -Punkty pomiaru dla każdej fazy: +\begin{enumerate} + \item \textbf{Unity -- tryb statyczny}: Gracz nieruchomy z~włączoną + nieśmiertelnością, pełne 90~sekund rozgrywki profilowane w~jednej sesji + \item \textbf{Unity -- tryb dynamiczny}: Gracz aktywnie poruszający się + i~strzelający, pełne 90~sekund rozgrywki + \item \textbf{Unreal Engine -- tryb statyczny}: Ze względu na ograniczenia + techniczne (awaria przy śledzeniu Vulkan API) rozgrywkę podzielono na + trzy 30-sekundowe fazy, uruchamiane z~flagą \texttt{-{}-start-time=N} + \item \textbf{Unreal Engine -- tryb dynamiczny}: Analogicznie do trybu + statycznego, trzy fazy po 30~sekund z~aktywnym graczem +\end{enumerate} + +Narzędzie NVIDIA Nsight Systems rejestrowało: \begin{itemize} - \item \textbf{Faza 1}: 10s (wczesne niskie obciążenie), 20s (stabilne niskie obciążenie), 25s (koniec fazy) - \item \textbf{Faza 2}: 35s (przejście do średniego obciążenia), 45s (stabilne średnie obciążenie), 55s (koniec fazy) - \item \textbf{Faza 3}: 65s (przejście do wysokiego obciążenia), 75s (szczytowe obciążenie), 85s (koniec fazy) + \item Wywołania Vulkan API (dla Unity -- dla Unreal niemożliwe z~powodu + awarii) + \item Metryki sprzętowe GPU z~częstotliwością 10\,000~Hz + \item Wywołania funkcji systemowych (pthread, futex itp.) \end{itemize} diff --git a/latex/tex/wywiady-analiza.tex b/latex/tex/wywiady-analiza.tex index 285585e..947c4e0 100644 --- a/latex/tex/wywiady-analiza.tex +++ b/latex/tex/wywiady-analiza.tex @@ -20,7 +20,6 @@ Respondenci zostali dobrani według kryterium posiadania co najmniej rocznego do \item \textbf{Respondent 8}: 2 lata amatorsko w Unity, 1,5 roku profesjonalnie + pół roku stażu w Unreal, kilkanaście projektów w obu silnikach \end{itemize} -Łącznie badana próba reprezentuje szerokie spektrum doświadczeń -- od osób skupionych wyłącznie na Unity, przez deweloperów wykorzystujących oba silniki, po profesjonalistów pracujących głównie w Unreal Engine. \subsection{Motywy wyboru silnika} \label{subsec:motywy-wyboru} @@ -248,7 +247,7 @@ Na podstawie wywiadów można zasugerować następujące kryteria wyboru silnika \hline \textbf{Kryterium} & \textbf{Unity} & \textbf{Unreal Engine} \\ \hline -Doświadczenie zespołu & Początkujący, znajomość C\# & Średniozaawansowany, znajomość C++ \\ +Doświadczenie zespołu & Początkujący, znajomość C\# & Średnie, znajomość C++ \\ \hline Typ projektu & Gry mobilne, 2D, indie & FPS, AAA, realistyczna grafika \\ \hline