%-----------------------------------------------
%  Engineer's & Master's Thesis Template
%  Copyleft by Artur M. Brodzki & Piotr Woźniak
%  Warsaw University of Technology, 2019-2022
%-----------------------------------------------

\documentclass[
    bindingoffset=5mm,  % Binding offset
    footnoteindent=3mm, % Footnote indent
    hyphenation=true    % Hyphenation turn on/off
]{src/wut-thesis}

\graphicspath{{tex/img/}} % Katalog z obrazkami.
\addbibresource{bibliografia.bib} % Plik .bib z bibliografią
\usepackage{placeins}
\usepackage{float}
% Force Adagio Slab (required) for XeTeX/LuaTeX builds.
% This ensures the font is set after other packages (e.g., babel) that may change encodings.
\IfFileExists{fonts/PW_Adagio_Slab/Adagio_Slab-Regular.otf}{%
    \setmainfont[Path=fonts/PW_Adagio_Slab/,UprightFont=Adagio_Slab-Regular.otf,ItalicFont=Adagio_Slab-Regular_italic.otf,BoldFont=Adagio_Slab-Bold.otf,BoldItalicFont=Adagio_Slab-Bold_italic.otf]{Adagio Slab}%
}{%
    \PackageError{wut-thesis}{Adagio Slab fonts not found in 'fonts/PW_Adagio_Slab'. Compilation requires these fonts.}{Please add the OTF files to the repository (latex/fonts/PW_Adagio_Slab/) and recompile with XeLaTeX or LuaLaTeX.}
}
% Fix ToC number width for deep sections (e.g. 5.10.1)
\usepackage{tocloft}
\setlength{\cftsecnumwidth}{3em}
\setlength{\cftsubsecnumwidth}{4em}
\setlength{\cftsubsubsecnumwidth}{5em}

%-------------------------------------------------------------
% Wybór wydziału:
%  \facultyeiti: Wydział Elektroniki i Technik Informacyjnych
%  \facultymeil: Wydział Mechaniczny Energetyki i Lotnictwa
% --
% Rodzaj pracy: \EngineerThesis, \MasterThesis
% --
% Wybór języka: \langpol, \langeng
%-------------------------------------------------------------
\facultyeiti    % Wydział Elektroniki i Technik Informacyjnych
\MasterThesis % Praca inżynierska
\langpol % Praca w języku polskim

\begin{document}

%------------------
% Strona tytułowa
%------------------
\instytut{Automatyki i Informatyki Stosowanej}
\kierunek{Informatyka}
\specjalnosc{Inteligetne Systemy}
\title{
    Porównanie wydajności i możliwości \\ współczesnych silników gier komputerowych
}
% Title in English for English theses
% In English theses, you may remove this command
\engtitle{
    Comparison of performance and capabilities of modern computer games engines
}

\author{inż. Krzysztof Rudnicki}
\album{307585}
\promotor{dr inż. Michał Chwesiuk}
\date{\the\year}
\maketitle

%-------------------------------------
% Streszczenie po polsku dla \langpol
% English abstract if \langeng is set
%-------------------------------------
\cleardoublepage % Zaczynamy od nieparzystej strony
\abstract 
Przez ostatnią dekadę rynek tworzenia gier komputerowych \\ zdominowały dwa silniki: Unity oraz 
Unreal Engine. Niniejsza praca podejmuje się wyzwania przeprowadzenia analizy
porównawczej
obu tych silników pod kątem wyd ajności oraz procesu
programowania gier. W~tym celu wykorzystano 
narzędzie do
profilowania NVIDIA Nsight, służące do oceny wydajności aplikacji graficznych, 
w~szczególności do pomiaru czasu klatki, obciążenia GPU oraz
efektywności renderowania. 
Przeprowadzono również wywiady środowiskowe z~osobami związanymi profesjonalnie z~tworzeniem 
gier na obu platformach, jak również opisano proces twórczy, napotkane trudności oraz przewagi 
każdego z~silników. Na potrzeby pracy stworzono dwie gry w~tym samym gatunku --- 
\emph{bullet hell} --- słynącym z mnogości elementów na ekranie i~efektów specjalnych, 
a~jednocześnie będącym relatywnie łatwym do zaimplementowania. Jedna gra została stworzona 
w~języku C\# (Unity), druga w~C++ (Unreal Engine). Następnie obie gry zostały poddane analizie 
w~programie NVIDIA Nsight w~celu oceny możliwości optymalizacji obu silników. Na podstawie 
wywiadów oraz analizy procesu twórczego scharakteryzowano również inne aspekty obu silników, 
takie jak próg wejścia, współpraca z systemami kontroli wersji oraz architektura silnika. 
Praca stara się wypełnić niszę w~literaturze i~badaniach związanych z~oceną obu silników do gier.

\keywords Gry, Silniki do gier, C\#, C++, Unreal Engine, Unity, Gry \emph{bullet hell}, 
NVIDIA Nsight, Wydajność, Wywiady, Analiza porównawcza, Profilowanie, Renderowanie, 
Optymalizacja, Programowanie gier, Tworzenie gier, Czas klatki, Architektura silnika, 
Kontrola wersji, GPU

%----------------------------------------
% Streszczenie po angielsku dla \langpol
% Polish abstract if \langeng is set
%----------------------------------------
\clearpage
\secondabstract 
Over the past decade, the video game development market has been dominated by two engines: Unity and 
Unreal Engine. This thesis undertakes the challenge of conducting a~comparative analysis of both 
engines in terms of performance and game programming workflows. To this end, the profiling tool NVIDIA 
Nsight was utilized to evaluate the performance of graphics applications, particularly for measuring 
frame time, GPU load, and rendering efficiency. Expert interviews were also conducted with professionals 
involved in game development on both platforms, and the creative process, encountered difficulties, 
and advantages of each engine were described. For the purposes of this study, two games were developed 
in the same genre --- \emph{bullet hell} --- known for its abundance of on-screen elements and special 
effects, while being relatively straightforward to implement. One game was created in C\# (Unity), the 
other in C++ (Unreal Engine). Both games were then analyzed using NVIDIA Nsight to assess the 
optimization capabilities of both engines. Drawing from the interviews and analysis of the creative 
process, other aspects of both engines were also characterized, such as the learning curve, integration 
with version control systems, and engine architecture. This thesis aims to fill a~gap in the literature 
and research concerning the evaluation of game engines.

\secondkeywords Games, Game engines, C\#, C++, Unreal Engine, Unity, Bullet hell games, NVIDIA Nsight, 
Performance, Interviews, Comparative analysis, Profiling, Rendering, Optimization, Game programming, 
Game development, Frame time, Engine architecture, Version control, GPU

\pagestyle{plain}

%--------------
% Spis treści
%--------------
\cleardoublepage % Zaczynamy od nieparzystej strony
\tableofcontents

%------------
% Rozdziały
%------------
\cleardoublepage % Zaczynamy od nieparzystej strony
\pagestyle{headings}

\input{tex/1-wstep}                    % Wstęp
\input{tex/2-przeglad-literatury}       % Przegląd literatury i istniejących rozwiązań
\input{tex/3-silniki-gier}              % Charakterystyka współczesnych silników gier
\input{tex/wywiady-analiza}  
\input{tex/6-analiza-mozliwosci}        % Analiza możliwości i funkcjonalności
\input{tex/4-metodologia}               % Metodologia badań i kryteria porównania
\input{tex/implementacja-gry}           % Analiza wywiadów z deweloperami gier
\input{tex/narzedzia-profilowania}      % Narzędzia profilowania wydajności
\input{tex/5-testy-wydajnosci}          % Testy wydajności
\input{tex/8-podsumowanie}        

%---------------
% Bibliografia
%---------------
\cleardoublepage % Zaczynamy od nieparzystej strony
\begingroup
\emergencystretch=1em
\printbibliography
\endgroup
\clearpage

% Wykaz symboli i skrótów.
% Pamiętaj, żeby posortować symbole alfabetycznie
% we własnym zakresie. Makro \acronymlist
% generuje właściwy tytuł sekcji, w zależności od języka.
% Makro \acronym dodaje skrót/symbol do listy,
% zapewniając podstawowe formatowanie.
\acronymlist
\acronym{EiTI}{Wydział Elektroniki i Technik Informacyjnych}
\acronym{PW}{Politechnika Warszawska}
\vspace{0.8cm}

%--------------------------------------
% Spisy: rysunków, tabel, załączników
%--------------------------------------
\pagestyle{plain}

\listoffigurestoc    % Spis rysunków.
\vspace{1cm}         % vertical space
\listoftablestoc     % Spis tabel.
\vspace{1cm}         % vertical space
% \listofappendicestoc % Spis załączników

%-------------
% Załączniki
%-------------

% Obrazki i tabele w załącznikach nie trafiają do spisów
\captionsetup[figure]{list=no}
\captionsetup[table]{list=no}

% Załącznik 1
%\clearpage
%\appendix{Nazwa załącznika 1}
%\lipsum[1-3]
%\begin{figure}[!h]
%	\centering \includegraphics[width=0.5\linewidth]{logopw2.png}
%	\caption{Obrazek w załączniku.}
%\end{figure}
%\lipsum[4-7]
%
%% Załącznik 2
%\clearpage
%\appendix{Nazwa załącznika 2}
%\lipsum[1-2]
%\begin{table}[!h] \centering
%    \caption{Tabela w załączniku.}
%    \begin{tabular} {| c | c | r |} \hline
%        Kolumna 1       & Kolumna 2 & Liczba \\ \hline\hline
%        cell1           & cell2     & 60     \\ \hline
%        \multicolumn{2}{|r|}{Suma:} & 123,45 \\ \hline
%    \end{tabular}
%\end{table}
%\lipsum[3-4]

% Używając powyższych spisów jako szablonu,
% możesz dodać również swój własny wykaz,
% np. spis algorytmów.

\end{document} % Dobranoc.
