\clearpage \section{Narzędzia profilowania wydajności} \label{sec:narzedzia-profilowania} \label{subsec:wbudowane-narzedzia} Zarówno Unity, jak i~Unreal Engine oferują własne, wbudowane narzędzia do analizy wydajności. Każde z~nich posiada unikalne cechy dostosowane do specyfiki danego silnika. 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. \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. \begin{figure}[H] \centering \includegraphics[width=0.9\textwidth]{tex/img/unity_profiler.png} \caption{Interfejs Unity Profiler z~widokiem analizy wydajności CPU i~GPU.} \label{fig:unity-profiler} \end{figure} 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. \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~\cite{unreal_docs}. \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{tex/img/unreal_profiler.png} \caption{Interfejs Unreal Insights z~widokiem analizy wydajności.} \label{fig:unreal-profiler} \end{figure} Pomimo rozbudowanych możliwości, wbudowane profilery silników posiadają istotne ograniczenia w~kontekście porównawczych badań wydajnościowych: \begin{enumerate} \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{Nieporównywalność formatów wyjściowych} -- dane eksportowane przez różne profilery mają odmienne struktury. \end{enumerate} Z~powyższych powodów zdecydowano się na zastosowanie zewnętrznego, niezależnego od silnika narzędzia profilowania. \subsection{NVIDIA Nsight Graphics} \label{subsec:nvidia-nsight} 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}. \begin{figure}[H] \centering \includegraphics[width=0.9\textwidth]{tex/img/nvidia_nsight.jpg} \caption{Interfejs NVIDIA Nsight Graphics z~widokiem analizy GPU.} \label{fig:nvidia-nsight} \end{figure} Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany był następującymi czynnikami: \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. \item \textbf{Standaryzowane metryki} -- narzędzie dostarcza zunifikowany zestaw metryk sprzętowych (GPU utilization, memory bandwidth, shader throughput). \item \textbf{Minimalny narzut} -- profilowanie na poziomie sterownika generuje mniejsze zakłócenia niż profilery działające wewnątrz silnika. \item \textbf{Dostęp do danych niskopoziomowych} -- możliwość analizy poszczególnych wywołań draw call, shaderów, transferów pamięci. \item \textbf{Spójny format danych} -- wyniki z~obu silników mają identyczną strukturę, co ułatwia automatyzację analizy. \end{itemize} NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych: Główny moduł analizy wydajności, umożliwiający: \begin{itemize} \item Przechwycenie i~analizę pojedynczej klatki (frame capture). \item Hierarchiczny widok wszystkich wywołań GPU. \item Pomiar czasu wykonania każdego etapu renderowania. \item Identyfikację wąskich gardeł (bottlenecks). \item Analizę wykorzystania jednostek obliczeniowych GPU. \end{itemize} Moduł do długoterminowej analizy wydajności: \begin{itemize} \item Rejestrowanie metryk przez określony czas (nie tylko pojedyncza klatka). \item Wykrywanie spadków wydajności i~ich przyczyn. \item Analiza zmienności czasów klatek (frame time variance). \item Korelacja obciążenia GPU z~wydarzeniami w~grze. \end{itemize} Narzędzie do optymalizacji shaderów: \begin{itemize} \item Analiza wydajności poszczególnych shaderów. \item Identyfikacja nieefektywnych instrukcji. \item Pomiar occupancy (wykorzystania jednostek obliczeniowych). \end{itemize} \subsection{Przetwarzanie danych z~Nsight} \label{subsec:przetwarzanie-nsight} Dane zebrane przez NVIDIA Nsight wymagają odpowiedniego przetworzenia w~celu uzyskania porównywalnych metryk. Nsight umożliwia eksport danych w~kilku formatach: \begin{itemize} \item \textbf{CSV} -- tabularyczne dane liczbowe. \item \textbf{JSON} -- strukturalne dane z~pełną hierarchią wywołań. \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. Z~danych eksportowanych przez Nsight wyodrębniono następujące metryki: \begin{table}[H] \centering \caption{Kluczowe metryki wydajnościowe z~NVIDIA Nsight} \label{tab:metryki-nsight} \begin{tabular}{|>{\raggedright\arraybackslash}p{4cm}|>{\raggedright\arraybackslash}p{3cm}|>{\raggedright\arraybackslash}p{5.5cm}|} \hline \textbf{Metryka} & \textbf{Jednostka} & \textbf{Opis} \\ \hline Frame Time & ms & Całkowity czas renderowania klatki \\ \hline GPU Duration & ms & Czas pracy GPU (bez CPU overhead) \\ \hline Draw Calls & liczba & Ilość wywołań rysowania na klatkę \\ \hline Triangles Rendered & liczba & Liczba wyrenderowanych trójkątów \\ \hline GPU Memory Used & MB & Zużycie pamięci VRAM \\ \hline SM Occupancy & \% & Wykorzystanie jednostek obliczeniowych \\ \hline Memory Bandwidth & GB/s & Przepustowość pamięci GPU \\ \hline \end{tabular} \end{table} \subsection{Podsumowanie wyboru narzędzi} \label{subsec:podsumowanie-narzedzi} 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{Powtarzalność} -- standaryzowana procedura pomiarowa. \end{enumerate}