feat: half of work done

This commit is contained in:
Krzysztof kuhy Rudnicki 2026-01-24 21:12:30 +01:00
parent df493f986f
commit dbe8c7772f
5 changed files with 76 additions and 91 deletions

View File

@ -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}%

Binary file not shown.

View File

@ -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.

View File

@ -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}

View File

@ -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