diff --git a/latex/bibliografia.bib b/latex/bibliografia.bib index d73eae0..d66bdfa 100644 --- a/latex/bibliografia.bib +++ b/latex/bibliografia.bib @@ -449,6 +449,113 @@ year = {2024} } +@misc{unity_profiler_cpu, + author = {{Unity Technologies}}, + title = {CPU Usage Profiler module reference}, + howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerCPU.html}}, + year = {2024} +} + +@misc{unity_profiler_gpu, + author = {{Unity Technologies}}, + title = {GPU Usage Profiler module}, + howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerGPU.html}}, + year = {2024} +} + +@misc{unity_profiler_memory, + author = {{Unity Technologies}}, + title = {Memory Profiler module reference}, + howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerMemory.html}}, + year = {2024} +} + +@misc{unity_profiler_audio, + author = {{Unity Technologies}}, + title = {Audio Profiler module reference}, + howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerAudio.html}}, + year = {2024} +} + +@misc{unity_profiler_physics, + author = {{Unity Technologies}}, + title = {Physics Profiler module}, + howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/ProfilerPhysics.html}}, + year = {2024} +} + +@misc{unity_frame_debugger, + author = {{Unity Technologies}}, + title = {Introduction to the Frame Debugger}, + howpublished = {Dostęp zdalny: \url{https://docs.unity3d.com/Manual/FrameDebugger.html}}, + year = {2024} +} + +% Unreal Insights Modules +@misc{unreal_insights, + author = {{Epic Games}}, + title = {Unreal Insights in Unreal Engine}, + howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-insights-in-unreal-engine}}, + year = {2024} +} + +@misc{unreal_timing_insights, + author = {{Epic Games}}, + title = {Timing Insights in Unreal Engine 5}, + howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/timing-insights-in-unreal-engine-5}}, + year = {2024} +} + +@misc{unreal_memory_insights, + author = {{Epic Games}}, + title = {Memory Insights in Unreal Engine}, + howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/memory-insights-in-unreal-engine}}, + year = {2024} +} + +@misc{unreal_animation_insights, + author = {{Epic Games}}, + title = {Animation Insights in Unreal Engine}, + howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/animation-insights-in-unreal-engine}}, + year = {2024} +} + +@misc{unreal_network_insights, + author = {{Epic Games}}, + title = {Networking Insights in Unreal Engine}, + howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-insights-in-unreal-engine}}, + year = {2024} +} + +@misc{unreal_stat_commands, + author = {{Epic Games}}, + title = {Stat Commands in Unreal Engine}, + howpublished = {Dostęp zdalny: \url{https://dev.epicgames.com/documentation/en-us/unreal-engine/stat-commands-in-unreal-engine}}, + year = {2024} +} + +% NVIDIA Nsight Graphics +@misc{nsight_graphics_features, + author = {{NVIDIA Corporation}}, + title = {Nsight Graphics Features}, + howpublished = {Dostęp zdalny: \url{https://developer.nvidia.com/nsight-graphics-features}}, + year = {2024} +} + +@misc{nsight_graphics_userguide, + author = {{NVIDIA Corporation}}, + title = {NVIDIA Nsight Graphics User Guide}, + howpublished = {Dostęp zdalny: \url{https://docs.nvidia.com/nsight-graphics/UserGuide/index.html}}, + year = {2024} +} + +@misc{nsight_gpu_trace, + author = {{NVIDIA Corporation}}, + title = {GPU Trace Profiler Overview}, + howpublished = {Dostęp zdalny: \url{https://docs.nvidia.com/nsight-graphics/UserGuide/gpu-trace-overview.html}}, + year = {2024} +} + @misc{unity_hub, author = {Unity Technologies}, title = {Unity Hub}, diff --git a/latex/main.pdf b/latex/main.pdf index af4bf16..041a88c 100644 Binary files a/latex/main.pdf and b/latex/main.pdf differ diff --git a/latex/main.tex b/latex/main.tex index 309451a..1c6eba6 100644 --- a/latex/main.tex +++ b/latex/main.tex @@ -96,7 +96,7 @@ Over the past decade, the video game development market has been dominated by tw \input{tex/4-metodologia} % Metodologia badań i kryteria porównania \input{tex/wywiady-analiza} \input{tex/implementacja-gry} % Analiza wywiadów z deweloperami gier -% \input{tex/narzedzia-profilowania} % Narzędzia profilowania wydajności +\input{tex/narzedzia-profilowania} % Narzędzia profilowania wydajności % \input{tex/5-testy-wydajnosci} % Testy wydajności % \input{tex/6-analiza-mozliwosci} % Analiza możliwości i funkcjonalności % \input{tex/7-porownanie-wynikow} % Porównanie wyników i analiza diff --git a/latex/tex/narzedzia-profilowania.tex b/latex/tex/narzedzia-profilowania.tex index 3a78d2d..27bfc67 100644 --- a/latex/tex/narzedzia-profilowania.tex +++ b/latex/tex/narzedzia-profilowania.tex @@ -11,32 +11,32 @@ Zarówno Unity, jak i~Unreal Engine oferują własne, wbudowane narzędzia do an \subsubsection{Unity Profiler} -Unity dostarcza rozbudowany profiler dostępny bezpośrednio w~edytorze (Window $\rightarrow$ Analysis $\rightarrow$ Profiler). Narzędzie to oferuje: +Unity dostarcza rozbudowany profiler dostępny bezpośrednio w~edytorze (Window $\rightarrow$ Analysis $\rightarrow$ Profiler)~\cite{unity_profiler}. Narzędzie to oferuje: \begin{itemize} - \item \textbf{CPU Profiler} -- analiza czasu wykonania poszczególnych funkcji, z~podziałem na kategorie (rendering, skrypty, fizyka, animacje) - \item \textbf{GPU Profiler} -- pomiar czasu renderowania na karcie graficznej - \item \textbf{Memory Profiler} -- szczegółowa analiza alokacji pamięci, wykrywanie wycieków - \item \textbf{Audio Profiler} -- monitorowanie obciążenia systemu dźwiękowego - \item \textbf{Physics Profiler} -- analiza wydajności silnika fizyki - \item \textbf{Frame Debugger} -- krokowa analiza procesu renderowania pojedynczej klatki + \item \textbf{CPU Profiler} -- analiza czasu wykonania poszczególnych funkcji, z~podziałem na kategorie (rendering, skrypty, fizyka, animacje)~\cite{unity_profiler_cpu} + \item \textbf{GPU Profiler} -- pomiar czasu renderowania na karcie graficznej~\cite{unity_profiler_gpu} + \item \textbf{Memory Profiler} -- szczegółowa analiza alokacji pamięci, wykrywanie wycieków~\cite{unity_profiler_memory} + \item \textbf{Audio Profiler} -- monitorowanie obciążenia systemu dźwiękowego~\cite{unity_profiler_audio} + \item \textbf{Physics Profiler} -- analiza wydajności silnika fizyki~\cite{unity_profiler_physics} + \item \textbf{Frame Debugger} -- krokowa analiza procesu renderowania pojedynczej klatki~\cite{unity_frame_debugger} \end{itemize} Unity Profiler umożliwia również zdalne profilowanie aplikacji uruchomionej na urządzeniu docelowym (np.~smartfonie), co jest szczególnie przydatne przy optymalizacji gier mobilnych. \subsubsection{Unreal Insights} -Unreal Engine oferuje narzędzie Unreal Insights, które zastąpiło starszy system Session Frontend. Kluczowe funkcjonalności obejmują: +Unreal Engine oferuje narzędzie Unreal Insights, które zastąpiło starszy system Session Frontend~\cite{unreal_insights}. Kluczowe funkcjonalności obejmują: \begin{itemize} - \item \textbf{Timing Insights} -- precyzyjny pomiar czasu wykonania poszczególnych systemów silnika - \item \textbf{Asset Loading Insights} -- analiza czasu ładowania zasobów - \item \textbf{Memory Insights} -- monitorowanie alokacji i~dealokacji pamięci - \item \textbf{Animation Insights} -- profilowanie systemu animacji - \item \textbf{Network Insights} -- analiza ruchu sieciowego w~grach multiplayer + \item \textbf{Timing Insights} -- precyzyjny pomiar czasu wykonania poszczególnych systemów silnika~\cite{unreal_timing_insights} + \item \textbf{Asset Loading Insights} -- analiza czasu ładowania zasobów~\cite{unreal_insights} + \item \textbf{Memory Insights} -- monitorowanie alokacji i~dealokacji pamięci~\cite{unreal_memory_insights} + \item \textbf{Animation Insights} -- profilowanie systemu animacji~\cite{unreal_animation_insights} + \item \textbf{Network Insights} -- analiza ruchu sieciowego w~grach multiplayer~\cite{unreal_network_insights} \end{itemize} -Dodatkowo Unreal Engine udostępnia komendy konsolowe (np.~\texttt{stat fps}, \texttt{stat unit}, \texttt{stat gpu}) pozwalające na szybki podgląd podstawowych metryk wydajności podczas rozgrywki. +Dodatkowo Unreal Engine udostępnia komendy konsolowe (np.~\texttt{stat fps}, \texttt{stat unit}, \texttt{stat gpu}) pozwalające na szybki podgląd podstawowych metryk wydajności podczas rozgrywki~\cite{unreal_stat_commands}. \subsubsection{Ograniczenia narzędzi wbudowanych} @@ -46,7 +46,6 @@ Pomimo rozbudowanych możliwości, wbudowane profilery silników posiadają isto \item \textbf{Brak standaryzacji metryk} -- każdy silnik definiuje i~mierzy parametry w~odmienny sposób, co utrudnia bezpośrednie porównania \item \textbf{Różna granularność danych} -- poziom szczegółowości raportów różni się między silnikami \item \textbf{Narzut profilowania} -- wbudowane profilery same generują obciążenie, które może być różne dla każdego silnika - \item \textbf{Brak dostępu do danych niskopoziomowych} -- profilery silnikowe operują na poziomie abstrakcji silnika, nie hardware'u \item \textbf{Nieporównywalność formatów wyjściowych} -- dane eksportowane przez różne profilery mają odmienne struktury \end{enumerate} @@ -55,11 +54,14 @@ Z~powyższych powodów zdecydowano się na zastosowanie zewnętrznego, niezależ \subsection{NVIDIA Nsight Graphics} \label{subsec:nvidia-nsight} -NVIDIA Nsight Graphics to profesjonalne narzędzie do profilowania i~debugowania aplikacji graficznych, oferujące głęboki wgląd w~działanie GPU niezależnie od używanego silnika czy API graficznego. +NVIDIA Nsight Graphics to narzędzie do profilowania i~debugowania +aplikacji graficznych, oferujące wgląd w~działanie GPU +niezależnie od używanego silnika czy API graficznego~\cite{nvidia_nsight, nsight_graphics_userguide}. \subsubsection{Uzasadnienie wyboru} -Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany był następującymi czynnikami: +Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany +był następującymi czynnikami~\cite{nsight_graphics_features}: \begin{itemize} \item \textbf{Niezależność od silnika} -- Nsight analizuje aplikację na poziomie wywołań API graficznego (DirectX, Vulkan, OpenGL), co zapewnia porównywalność wyników między Unity a~Unreal Engine @@ -71,10 +73,10 @@ Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany był nas \subsubsection{Możliwości narzędzia} -NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych: +NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych~\cite{nsight_graphics_userguide}: \paragraph{Frame Profiler} -Główny moduł analizy wydajności, umożliwiający: +Główny moduł analizy wydajności, umożliwiający~\cite{nsight_graphics_features}: \begin{itemize} \item Przechwycenie i~analizę pojedynczej klatki (frame capture) \item Hierarchiczny widok wszystkich wywołań GPU @@ -84,7 +86,7 @@ Główny moduł analizy wydajności, umożliwiający: \end{itemize} \paragraph{GPU Trace} -Moduł do długoterminowej analizy wydajności: +Moduł do długoterminowej analizy wydajności~\cite{nsight_gpu_trace}: \begin{itemize} \item Rejestrowanie metryk przez określony czas (nie tylko pojedyncza klatka) \item Wykrywanie spadków wydajności i~ich przyczyn @@ -93,27 +95,13 @@ Moduł do długoterminowej analizy wydajności: \end{itemize} \paragraph{Shader Profiler} -Narzędzie do optymalizacji shaderów: +Narzędzie do optymalizacji shaderów~\cite{nsight_graphics_userguide}: \begin{itemize} \item Analiza wydajności poszczególnych shaderów \item Identyfikacja nieefektywnych instrukcji \item Pomiar occupancy (wykorzystania jednostek obliczeniowych) - \item Sugestie optymalizacyjne \end{itemize} -\subsubsection{Konfiguracja środowiska pomiarowego} - -Przed przeprowadzeniem pomiarów skonfigurowano środowisko w~następujący sposób: - -\begin{enumerate} - \item Wyłączenie V-Sync w~obu silnikach (eliminacja sztucznego ograniczenia FPS) - \item Ustawienie identycznej rozdzielczości renderowania (1920$\times$1080) - \item Wyłączenie dynamicznego skalowania rozdzielczości - \item Ustawienie stałej częstotliwości zegara GPU (eliminacja power throttlingu) - \item Zamknięcie zbędnych procesów w~tle - \item Oczekiwanie na ustabilizowanie temperatury GPU przed pomiarem -\end{enumerate} - \subsection{Przetwarzanie danych z~Nsight} \label{subsec:przetwarzanie-nsight} @@ -121,11 +109,11 @@ Dane zebrane przez NVIDIA Nsight wymagają odpowiedniego przetworzenia w~celu uz \subsubsection{Eksport danych} -Nsight umożliwia eksport danych w~kilku formatach: +Nsight umożliwia eksport danych w~kilku formatach~\cite{nsight_graphics_userguide}: \begin{itemize} - \item \textbf{CSV} -- tabularyczne dane liczbowe, idealne do dalszej analizy + \item \textbf{CSV} -- tabularyczne dane liczbowe \item \textbf{JSON} -- strukturalne dane z~pełną hierarchią wywołań - \item \textbf{HTML Report} -- czytelny raport z~wykresami (mniej przydatny do automatyzacji) + \item \textbf{HTML Report} -- graficzny raport z~wykresami \end{itemize} W~niniejszej pracy wykorzystano format CSV ze względu na łatwość importu do narzędzi analizy statystycznej. @@ -134,7 +122,7 @@ W~niniejszej pracy wykorzystano format CSV ze względu na łatwość importu do Z~danych eksportowanych przez Nsight wyodrębniono następujące metryki: -\begin{table}[htbp] +\begin{table}[H] \centering \caption{Kluczowe metryki wydajnościowe z~NVIDIA Nsight} \label{tab:metryki-nsight} @@ -159,32 +147,6 @@ Memory Bandwidth & GB/s & Przepustowość pamięci GPU \\ \end{tabular} \end{table} -\subsubsection{Metodyka pomiarów} - -Dla każdej konfiguracji testowej przeprowadzono serię pomiarów według następującego protokołu: - -\begin{enumerate} - \item Uruchomienie aplikacji i~oczekiwanie 30 sekund na stabilizację - \item Rozpoczęcie rejestracji GPU Trace (czas trwania: 60 sekund) - \item Przechwycenie 10 pojedynczych klatek w~równych odstępach czasu - \item Zakończenie rejestracji i~eksport danych - \item Powtórzenie procedury 3 razy dla każdej konfiguracji -\end{enumerate} - -Wyniki uśredniono, odrzucając wartości odstające (outliers) zidentyfikowane metodą IQR (InterQuartile Range). - -\subsubsection{Automatyzacja analizy} - -W~celu zapewnienia powtarzalności i~eliminacji błędów ludzkich, proces analizy danych został częściowo zautomatyzowany za pomocą skryptów Python. Główne etapy obejmowały: - -\begin{itemize} - \item Parsowanie plików CSV eksportowanych z~Nsight - \item Agregację danych z~wielu sesji pomiarowych - \item Obliczanie statystyk opisowych (średnia, mediana, odchylenie standardowe) - \item Generowanie wykresów porównawczych - \item Eksport wyników do formatu LaTeX (tabele) -\end{itemize} - \subsection{Podsumowanie wyboru narzędzi} \label{subsec:podsumowanie-narzedzi} @@ -193,8 +155,6 @@ Zastosowanie NVIDIA Nsight jako głównego narzędzia profilowania zapewnia: \begin{enumerate} \item \textbf{Obiektywność} -- pomiary wykonywane na tym samym poziomie abstrakcji dla obu silników \item \textbf{Porównywalność} -- identyczne metryki i~format danych - \item \textbf{Wiarygodność} -- niskopoziomowe pomiary eliminują artefakty wprowadzane przez profilery silnikowe \item \textbf{Powtarzalność} -- standaryzowana procedura pomiarowa \end{enumerate} -Wbudowane profilery Unity i~Unreal Engine pozostają cennym narzędziem podczas procesu optymalizacji, jednak do celów badawczych wymagających bezpośredniego porównania między silnikami, zewnętrzne narzędzie oferuje znaczące przewagi metodologiczne.