praca_magisterska/presentation/my_thesis/main.tex

456 lines
13 KiB
TeX
Raw Normal View History

\documentclass{beamer}
\usepackage[fontsize=17pt]{fontsize}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{svg}
\usepackage[polish]{babel}
\usepackage{booktabs}
\usepackage{colortbl}
\usepackage{multirow}
\usepackage{amssymb}
\graphicspath{ {./images/} {../../latex/tex/img/} }
\usetheme{Warsaw}
%Information to be included in the title page:
\title{\large Porównanie wydajności i możliwości \\ współczesnych silników gier komputerowych}
\author{inż. Krzysztof Rudnicki}
\institute{
\textbf{Promotor:} dr inż. Michał Chwesiuk \\[0.3em]
Wydział Elektroniki i Technik Informacyjnych \\
Politechnika Warszawska
}
2026-03-08 21:29:46 +01:00
\date{\scriptsize 10 marca 2026}
\setbeamertemplate{footline}[frame number]{}
\beamertemplatenavigationsymbolsempty
\setbeamertemplate{headline}{}
\begin{document}
%==============================================================================
% TITLE
%==============================================================================
\begin{frame}
\vspace{-0.5cm}
\maketitle
\end{frame}
%==============================================================================
% TABLE OF CONTENTS
%==============================================================================
\begin{frame}
\frametitle{Plan prezentacji}
\tableofcontents
\end{frame}
%==============================================================================
% SECTION 1: MOTIVATION AND GOALS
%==============================================================================
\section{Cel i zakres pracy}
\begin{frame}
\frametitle{Motywacja}
\begin{itemize}
\item Rynek gier zdominowany przez dwa silniki:
\begin{itemize}
\item \textbf{Unity} -- prawie 25\,000 gier na Steam
\item \textbf{Unreal Engine} -- ponad 7\,500 gier na Steam
\end{itemize}
\item Brak systematycznych badań porównawczych
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Cel pracy}
\begin{enumerate}
\item Testy wydajności z~NVIDIA Nsight Systems
\item Implementacja identycznej gry w obu silnikach
\item Analiza porównawcza funkcjonalności
\item Wywiady z~8 deweloperami gier
\end{enumerate}
2026-03-08 21:29:46 +01:00
\end{frame}
\begin{frame}
\frametitle{Hipoteza}
\vspace{1cm}
\centering
\large
Unity osiągnie lepszą wydajność w~grze 2D \emph{bullet hell} dzięki natywnemu wsparciu dla grafiki 2D.
\end{frame}
%==============================================================================
% SECTION 2: METHODOLOGY
%==============================================================================
\section{Metodologia}
2026-03-08 21:29:46 +01:00
% SKRYPT: Wybór gatunku -- bullet hell
% Uzasadnienie:
% - Setki/tysiące pocisków na ekranie
% - Test zarządzania pamięcią (GC vs ręczne)
% - Intensywne wykrywanie kolizji
% - Skalowalność obciążenia
% - Prosta koncepcja -> fokus na wydajność
{
\setbeamercolor{footline}{fg=white}
\usebackgroundtemplate{
\includegraphics[width=\paperwidth, height=\paperheight]{touhou.jpg}}
\begin{frame}
\end{frame}
}
\begin{frame}
\frametitle{Parametry gry testowej}
\begin{itemize}
\item Czas rozgrywki: \textbf{90 sekund}
\item 3 typy przeciwników z różnymi wzorcami strzelania
2026-03-08 21:29:46 +01:00
\item Eskalacja trudności w 3 fazach
\item Limit: 200 jednoczesnych przeciwników
\item Interwał spawnu: 0,25s $\rightarrow$ 0,08s
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Środowisko testowe}
\begin{table}
\centering
2026-03-08 21:29:46 +01:00
\footnotesize
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{@{}ll@{}}
\toprule
2026-03-08 21:29:46 +01:00
CPU & AMD Ryzen 9 7900X3D \\
GPU & NVIDIA RTX 3090 (24 GB) \\
RAM & 32 GB \\
OS & Arch Linux \\
Unity & 6.0 LTS \\
Unreal & 5.5.3 \\
Profiler & NVIDIA Nsight Systems 2025.5.2 \\
\bottomrule
\end{tabular}
\end{table}
\end{frame}
%==============================================================================
% SECTION 3: IMPLEMENTATION
%==============================================================================
\section{Implementacja}
\begin{frame}
\frametitle{Implementacja -- Unity}
2026-03-08 21:29:46 +01:00
\begin{itemize}
\item Język: \textbf{C\#}
\item Natywny tryb 2D
\item \texttt{Rigidbody2D}, \texttt{Collider2D}
\item Object pooling: \texttt{SetActive()}
\item Hot reload
\item Instalacja: $\sim$30 min
\end{itemize}
\end{frame}
2026-03-08 21:29:46 +01:00
{
\setbeamercolor{footline}{fg=white}
\usebackgroundtemplate{
\includegraphics[width=\paperwidth, height=\paperheight]{unity_game.png}}
\begin{frame}
\end{frame}
}
\begin{frame}
\frametitle{Implementacja -- Unreal Engine}
2026-03-08 21:29:46 +01:00
\begin{itemize}
\item Język: \textbf{C++} / Blueprinty
\item ,,Fałszywe 2D'' w środowisku 3D
\item Object pooling -- 3 metody:
\begin{itemize}
\scriptsize
\item \texttt{SetActorHiddenInGame}
\item \texttt{SetActorEnableCollision}
\item \texttt{SetActorTickEnabled}
\end{itemize}
\item Instalacja: $\sim$2--4h (Linux)
\end{itemize}
\end{frame}
2026-03-08 21:29:46 +01:00
{
\setbeamercolor{footline}{fg=white}
\usebackgroundtemplate{
\includegraphics[width=\paperwidth, height=\paperheight]{unreal_game_view.png}}
\begin{frame}
\end{frame}
}
\begin{frame}
\frametitle{Porównanie doświadczeń implementacyjnych}
\begin{table}
\centering
\small
\begin{tabular}{lcc}
\toprule
\textbf{Aspekt} & \textbf{Unity} & \textbf{Unreal} \\
\midrule
Instalacja (Linux) & $\sim$30 min & $\sim$2--4 h \\
Natywne 2D & Tak & Nie \\
Język & C\# & C++ \\
Próg wejścia & Niski & Średni/Wysoki \\
Czas kompilacji & Szybki & Wolny \\
Object pooling & Prosty & Złożony \\
Hot reload & Tak & Ograniczony \\
\bottomrule
\end{tabular}
\end{table}
\end{frame}
%==============================================================================
% SECTION 4: PROFILING TOOL
%==============================================================================
\section{Narzędzie profilowania}
2026-03-08 21:29:46 +01:00
% SKRYPT: Dlaczego nie wbudowane profilery?
% Wbudowane profilery silników są nieporównywalne:
% - Różna definicja metryk
% - Różny narzut profilowania
% - Różne formaty wyjściowe
\begin{frame}
\frametitle{Dlaczego NVIDIA Nsight Systems?}
\begin{itemize}
\item NVIDIA Nsight -- niezależne narzędzie:
\begin{itemize}
\item Zunifikowane metryki sprzętowe
\item Analiza na poziomie Vulkan API
\item Minimalny narzut (poziom sterownika)
\item Spójny format dla obu silników
\end{itemize}
\end{itemize}
\end{frame}
{
\setbeamercolor{footline}{fg=white}
\usebackgroundtemplate{
\includegraphics[width=\paperwidth, height=\paperheight]{nvida_nsighty.jpg}}
\begin{frame}
\end{frame}
}
%==============================================================================
% SECTION 5: PERFORMANCE RESULTS
%==============================================================================
\section{Wyniki testów wydajności}
\begin{frame}
\frametitle{Unity -- wydajność klatek}
\begin{table}
\centering
2026-03-08 21:29:46 +01:00
\footnotesize
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{@{}lr@{}}
\toprule
Czas testu & 94,16 s \\
Wyrenderowane klatki & 13\,556 \\
Średni FPS & 143,96 (V-Sync: 144 Hz) \\
Mediana czasu klatki & 6,94 ms \\
99. percentyl (1\% low) & 7,58 ms (132 FPS) \\
2026-03-08 21:29:46 +01:00
Klatki w 5--10 ms & \textbf{98,24\%} \\
IQR czasu klatki & 0,08 ms \\
\bottomrule
\end{tabular}
\end{table}
\end{frame}
\begin{frame}
\frametitle{Unity -- architektura renderowania}
2026-03-08 21:29:46 +01:00
\small
\begin{itemize}
\item \textbf{Prosty potok}: 2 wywołania \texttt{vkQueueSubmit}/klatkę
\item \texttt{vkWaitForFences} -- \textbf{95,2\%} czasu Vulkan API
\begin{itemize}
\item CPU czeka na GPU $\rightarrow$ scenariusz \textbf{GPU-bound}
\end{itemize}
\item Łącznie $\sim$218\,815 wywołań Vulkan API
\item Tylko \textbf{3 potoki graficzne} w~całym teście
\item Wykorzystanie GPU: \textbf{$\sim$23\%} (ograniczone V-Sync)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Unreal Engine -- wydajność klatek}
\begin{table}
\centering
\small
\begin{tabular}{lrrr}
\toprule
\textbf{Metryka} & \textbf{Faza 1} & \textbf{Faza 2} & \textbf{Faza 3} \\
\midrule
Średni FPS & 332 & 339 & 162 \\
GPU Active & 91\% & 91\% & 50\% \\
vkQueueSubmit & 166\,918 & 186\,589 & 74\,393 \\
Submit/klatkę & 16,2 & 16,2 & 16,2 \\
\bottomrule
\end{tabular}
\end{table}
\vspace{0.3cm}
\begin{itemize}
\item Spadek o~\textbf{ponad 50\%} między fazami 1--2 a~fazą 3
\item Brak V-Sync -- pełne wykorzystanie GPU
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Unreal Engine -- architektura renderowania}
2026-03-08 21:29:46 +01:00
\small
\begin{itemize}
\item \textbf{Złożony potok}: 16 wywołań \texttt{vkQueueSubmit}/klatkę
\item Tworzenie potoków: \textbf{47--72\%} czasu Vulkan API
\begin{itemize}
\item $\sim$1000 potoków na fazę (vs 3 w Unity!)
\end{itemize}
\item Łącznie $\sim$\textbf{32 mln} wywołań Vulkan API
\item $\sim$\textbf{9 mln} wywołań synchronizacji OS
\item Intensywne użycie compute shaderów (culling, post-proc.)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Porównanie kluczowych wyników}
\begin{table}
\centering
\small
\begin{tabular}{lrr}
\toprule
\textbf{Metryka} & \textbf{Unity} & \textbf{Unreal} \\
\midrule
Wykorzystanie GPU & 23\% & 91\% / 50\% \\
Wywołania Vulkan API & $\sim$0,5 mln & $\sim$32 mln \\
Wywołania sync. OS & 29\,383 & $\sim$9 mln \\
Potoki graficzne & 3 & $\sim$2\,400 \\
Submit/klatkę & 2 & 16 \\
\bottomrule
\end{tabular}
\end{table}
\end{frame}
\begin{frame}
2026-03-08 21:29:46 +01:00
\frametitle{Interpretacja -- Unity}
\begin{block}{Unity}
\begin{itemize}
\item Prosty, dwuetapowy potok -- wydajny dla gier 2D
\item Stabilne czasy klatek (98,24\% w 5--10 ms)
\item Niewykorzystany potencjał GPU (V-Sync: 23\%)
\end{itemize}
\end{block}
2026-03-08 21:29:46 +01:00
\end{frame}
\begin{frame}
\frametitle{Interpretacja -- Unreal Engine}
\begin{block}{Unreal Engine}
\begin{itemize}
\item Złożony, wieloetapowy potok -- narzut dla prostych scen
\item Ciągła rekompilacja potoków (dynamiczna optymalizacja)
\item Pełne wykorzystanie GPU ($\sim$91\%)
2026-03-08 21:29:46 +01:00
\item Spadek wydajności przy dużym obciążeniu ($>$50\%)
\end{itemize}
\end{block}
\end{frame}
%==============================================================================
% SECTION 6: INTERVIEWS
%==============================================================================
\section{Wywiady z~deweloperami}
\begin{frame}
2026-03-08 21:29:46 +01:00
\frametitle{Wywiady -- najważniejsze wnioski (1/2)}
8 respondentów (1--10 lat doświadczenia):
\vspace{0.2cm}
\begin{itemize}
\item \textbf{Próg wejścia}: Unity niższy, Unreal wyższy
\item \textbf{Dokumentacja}: Unity lepsza (przykłady kodu); Unreal -- ,,szkieletowa''
\item \textbf{Blueprinty}: Ułatwiają współpracę z~nietechnicznymi, ale problemy z~Git
2026-03-08 21:29:46 +01:00
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Wywiady -- najważniejsze wnioski (2/2)}
\begin{itemize}
\item \textbf{Architektura}: Unreal wymusza porządek; Unity -- elastyczny
\item \textbf{C\# vs C++}: C\# łatwiejszy; C++ w~Unreal ,,niestandardowy''
\item \textbf{Materiały}: Unity przewaga ilościowa
\end{itemize}
\end{frame}
%==============================================================================
% SECTION 7: CONCLUSIONS
%==============================================================================
\section{Wnioski}
\begin{frame}
\frametitle{Weryfikacja hipotezy}
\textit{,,Unity osiągnie lepszą wydajność w~grze bullet hell~\ldots''}
\vspace{0.5cm}
\begin{itemize}
2026-03-08 21:29:46 +01:00
\item Prostsza architektura renderowania
\item Stabilniejsze czasy klatek
\item Łatwiejszy proces implementacji (60\% czasu)
\item Natywne wsparcie 2D
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Rekomendacje}
\begin{table}
\centering
2026-03-08 21:29:46 +01:00
\footnotesize
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{@{}lll@{}}
\toprule
2026-03-08 21:29:46 +01:00
\textbf{Projekt} & \textbf{Silnik} & \textbf{Powód} \\
\midrule
2026-03-08 21:29:46 +01:00
2D indie & Unity & Natywne 2D \\
Mobilna & Unity & Optymalizacja \\
Prototyp & Unity & Szybkie iteracje \\
3D AAA & Unreal & Nanite, Lumen \\
VR high-end & Unreal & Oświetlenie \\
Zespół mieszany & Unreal & Blueprinty \\
\bottomrule
\end{tabular}
\end{table}
\end{frame}
\begin{frame}
\frametitle{Wkład pracy}
\begin{enumerate}
\item \textbf{Zunifikowana metodyka pomiaru} -- \\ Nsight Systems jako niezależne narzędzie
\item \textbf{Analiza Vulkan API} -- \\ 32 mln wywołań (Unreal) vs 0,5 mln (Unity)
\item \textbf{Triangulacja metod} -- \\ testy + wywiady + implementacja
\item \textbf{Praktyczne rekomendacje} -- \\ macierz wyboru silnika
\end{enumerate}
\end{frame}
\begin{frame}
2026-03-08 21:29:46 +01:00
\frametitle{Ograniczenia}
\begin{itemize}
\item Jeden gatunek gry (bullet hell)
\item Pojedyncza konfiguracja sprzętowa (high-end)
\item 8 wywiadów (badanie eksploracyjne)
\end{itemize}
2026-03-08 21:29:46 +01:00
\end{frame}
\begin{frame}
\frametitle{Dalsze badania}
\begin{itemize}
\item Testy dla RPG, RTS, puzzle
\item Różne platformy (mobile, konsole, low-end PC)
\item Automatyczny framework benchmarkowy
2026-03-08 21:29:46 +01:00
\item Badanie długoterminowe (2--3 lata)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{}
\vspace{2cm}
\centering
{\Large Dziękuję za uwagę}
\vspace{1cm}
{\normalsize Pytania?}
\end{frame}
\end{document}