diff --git a/latex/bibliografia.bib b/latex/bibliografia.bib index d66bdfa..c82b083 100644 --- a/latex/bibliografia.bib +++ b/latex/bibliografia.bib @@ -449,49 +449,6 @@ 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}, @@ -499,63 +456,6 @@ 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 041a88c..bd6786f 100644 Binary files a/latex/main.pdf and b/latex/main.pdf differ diff --git a/latex/tex/3-silniki-gier.tex b/latex/tex/3-silniki-gier.tex index 1a6f3af..620fead 100644 --- a/latex/tex/3-silniki-gier.tex +++ b/latex/tex/3-silniki-gier.tex @@ -60,8 +60,7 @@ platformie .NET/Mono, co zapewnia: Architektura Unity opiera się na wzorcu \textit{GameObject-Component}, gdzie każdy obiekt w scenie (GameObject) może posiadać dowolną -liczbę komponentów definiujących jego zachowanie -\cite{unity_components_docs, unity_gameobject_docs}. +liczbę komponentów definiujących jego zachowanie. Podejście to promuje kompozycję nad dziedziczeniem i ułatwia tworzenie modularnego kodu. @@ -73,17 +72,15 @@ Unity oferuje kompleksowy zestaw narzędzi do tworzenia gier 2D i 3D: \item \textbf{Rendering} -- wsparcie dla wielu pipeline'ów renderowania: Built-in, Universal Render Pipeline (URP) dla platform mobilnych oraz High Definition Render Pipeline (HDRP) dla wysokiej - jakości grafiki \cite{unity_urp_docs, unity_hdrp_docs} - \item \textbf{Fizyka} -- integracja z silnikami PhysX (3D) i Box2D - (2D) \cite{unity_physics} + jakości grafiki + \item \textbf{Fizyka} -- integracja z silnikami PhysX (3D) i Box2D (2D) \item \textbf{Animacja} -- system Mecanim z obsługą maszyn stanów - i blendingu animacji \cite{unity_animation_docs} + i blendingu animacji \item \textbf{Audio} -- wbudowany system dźwięku przestrzennego - \cite{unity_audio_docs} \item \textbf{UI} -- dwa systemy interfejsu użytkownika: uGUI oraz - nowoczesny UI Toolkit \cite{unity_ugui_docs, unity_uitoolkit_docs} + nowoczesny UI Toolkit \item \textbf{Multiplayer} -- Netcode for GameObjects oraz - integracja z usługami sieciowymi \cite{unity_netcode_docs} + integracja z usługami sieciowymi \end{itemize} \subsubsection{Narzędzia deweloperskie} @@ -139,25 +136,25 @@ być mniej wydajne niż natywny C++. Unreal Engine wyróżnia się zaawansowanymi możliwościami graficznymi: \begin{itemize} - \item \textbf{Rendering} -- fotorealistyczna grafika z obsługą ray tracingu, Nanite i Lumen \cite{unreal_nanite,unreal_lumen} - \item \textbf{Fizyka} -- silnik Chaos Physics z obsługą destrukcji i symulacji ciał miękkich \cite{unreal_docs} - \item \textbf{Animacja} -- Control Rig, Animation Blueprints, IK Retargeting \cite{unreal_docs} - \item \textbf{Landscape} -- zaawansowane narzędzia do tworzenia dużych terenów \cite{unreal_docs} - \item \textbf{Niagara} -- system efektów cząsteczkowych nowej generacji \cite{unreal_niagara} - \item \textbf{Sequencer} -- narzędzie do tworzenia cinematików i cutscen \cite{unreal_docs} + \item \textbf{Rendering} -- fotorealistyczna grafika z obsługą ray tracingu, Nanite i Lumen + \item \textbf{Fizyka} -- silnik Chaos Physics z obsługą destrukcji i symulacji ciał miękkich + \item \textbf{Animacja} -- Control Rig, Animation Blueprints, IK Retargeting + \item \textbf{Landscape} -- zaawansowane narzędzia do tworzenia dużych terenów + \item \textbf{Niagara} -- system efektów cząsteczkowych nowej generacji + \item \textbf{Sequencer} -- narzędzie do tworzenia cinematików i cutscen \end{itemize} \subsubsection{Narzędzia deweloperskie} -Unreal Editor oferuje rozbudowane środowisko deweloperskie: +Unreal Editor oferuje rozbudowane środowisko deweloperskie~\cite{unreal_docs}: \begin{itemize} - \item Edytor poziomów z obsługą streamingu i Level of Detail (LOD) \cite{unreal_docs} - \item Blueprint Visual Scripting -- programowanie wizualne \cite{unreal_docs} - \item Material Editor -- węzłowy edytor materiałów \cite{unreal_material_editor} - \item Wbudowany profiler z analizą GPU/CPU i pamięci \cite{unreal_docs} - \item Marketplace -- sklep z zasobami i pluginami \cite{unreal_docs} - \item Dostęp do kodu źródłowego silnika \cite{unreal_wikipedia} - \item Live Coding -- eksperymentalne wsparcie dla hot reload w C++ \cite{unreal_docs} + \item Edytor poziomów z obsługą streamingu i Level of Detail (LOD) + \item Blueprint Visual Scripting -- programowanie wizualne + \item Material Editor -- węzłowy edytor materiałów + \item Wbudowany profiler z analizą GPU/CPU i pamięci + \item Marketplace -- sklep z zasobami i pluginami + \item Dostęp do kodu źródłowego silnika + \item Live Coding -- eksperymentalne wsparcie dla hot reload w C++ \end{itemize} \subsection{Porównanie architektoniczne} diff --git a/latex/tex/6-analiza-mozliwosci.tex b/latex/tex/6-analiza-mozliwosci.tex index 6d25da6..3fc07d9 100644 --- a/latex/tex/6-analiza-mozliwosci.tex +++ b/latex/tex/6-analiza-mozliwosci.tex @@ -6,41 +6,41 @@ \subsubsection{Wsparcie dla różnych technik renderingu} \paragraph{Unity} -Unity oferuje dwa główne pipeline'y renderowania: Built-in Render Pipeline (legacy), Universal Render Pipeline (URP) oraz High Definition Render Pipeline (HDRP)~\cite{unity_urp_docs, unity_hdrp_docs}. URP jest zoptymalizowany pod kątem wydajności i~kompatybilności między platformami, podczas gdy HDRP koncentruje się na~wysokiej jakości grafiki dla~platform o~dużej mocy obliczeniowej~\cite{gregory2018game}. +Unity oferuje dwa główne pipeline'y renderowania: Built-in Render Pipeline (legacy), Universal Render Pipeline (URP) oraz High Definition Render Pipeline (HDRP). URP jest zoptymalizowany pod kątem wydajności i~kompatybilności między platformami, podczas gdy HDRP koncentruje się na~wysokiej jakości grafiki dla~platform o~dużej mocy obliczeniowej~\cite{gregory2018game}. \begin{itemize} - \item \textbf{Forward rendering} -- domyślny tryb w~URP, efektywny dla~scen z~niewielką liczbą źródeł światła~\cite{unity_urp_docs} - \item \textbf{Deferred rendering} -- dostępny w~HDRP, umożliwia obsługę większej liczby świateł~\cite{unity_hdrp_docs} + \item \textbf{Forward rendering} -- domyślny tryb w~URP, efektywny dla~scen z~niewielką liczbą źródeł światła + \item \textbf{Deferred rendering} -- dostępny w~HDRP, umożliwia obsługę większej liczby świateł \item \textbf{Ray tracing} -- wsparcie w~HDRP dla~kart graficznych NVIDIA RTX~\cite{parker2010optix} \end{itemize} \paragraph{Unreal Engine} -Unreal Engine wykorzystuje zaawansowany deferred rendering pipeline z~obsługą ray tracingu w~czasie rzeczywistym~\cite{unreal_lumen, unreal_nanite}. +Unreal Engine wykorzystuje zaawansowany deferred rendering pipeline z~obsługą ray tracingu w~czasie rzeczywistym~\cite{unreal_docs}. \begin{itemize} \item \textbf{Deferred shading} -- standardowy pipeline dla~większości projektów~\cite{gregory2018game} \item \textbf{Forward shading} -- opcjonalny tryb dla~projektów VR wymagających niskiej latencji~\cite{anthes2016state} - \item \textbf{Ray tracing} -- pełne wsparcie dla~Lumen (global illumination) i~ray-traced reflections~\cite{unreal_lumen} - \item \textbf{Nanite} -- zwirtualizowana geometria pozwalająca na~renderowanie miliardów poligonów~\cite{unreal_nanite} + \item \textbf{Ray tracing} -- pełne wsparcie dla~Lumen (global illumination) i~ray-traced reflections + \item \textbf{Nanite} -- zwirtualizowana geometria pozwalająca na~renderowanie miliardów poligonów \end{itemize} \subsubsection{Systemy materiałów i shaderów} \paragraph{Unity} -Unity oferuje Shader Graph -- wizualny edytor do~tworzenia shaderów bez~pisania kodu~\cite{unity_shader_graph}. Dodatkowo wspiera shadery pisane w~HLSL oraz~Cg~\cite{farina2013shader}. +Unity oferuje Shader Graph -- wizualny edytor do~tworzenia shaderów bez~pisania kodu. Dodatkowo wspiera shadery pisane w~HLSL oraz~Cg~\cite{farina2013shader}. \begin{itemize} - \item \textbf{Shader Graph} -- intuicyjny, oparty na~węzłach interfejs~\cite{unity_shader_graph} + \item \textbf{Shader Graph} -- intuicyjny, oparty na~węzłach interfejs \item \textbf{HLSL/Cg} -- możliwość pisania custom shaderów~\cite{farina2013shader} - \item \textbf{Shader variants} -- system wariantów dla~optymalizacji~\cite{unity_shader_graph} + \item \textbf{Shader variants} -- system wariantów dla~optymalizacji \end{itemize} \paragraph{Unreal Engine} -Unreal oferuje Material Editor -- zaawansowany system węzłowy do~tworzenia materiałów~\cite{unreal_material_editor}. +Unreal oferuje Material Editor -- zaawansowany system węzłowy do~tworzenia materiałów~\cite{unreal_docs}. \begin{itemize} - \item \textbf{Material Editor} -- bogaty zestaw węzłów i~funkcji~\cite{unreal_material_editor} - \item \textbf{Material Functions} -- możliwość tworzenia wielokrotnego użytku komponentów~\cite{unreal_material_editor} + \item \textbf{Material Editor} -- bogaty zestaw węzłów i~funkcji + \item \textbf{Material Functions} -- możliwość tworzenia wielokrotnego użytku komponentów \item \textbf{Custom HLSL} -- integracja własnego kodu HLSL~\cite{farina2013shader} \end{itemize} @@ -48,18 +48,18 @@ Unreal oferuje Material Editor -- zaawansowany system węzłowy do~tworzenia mat \paragraph{Unity} \begin{itemize} - \item \textbf{Real-time lighting} -- dynamiczne oświetlenie w~czasie rzeczywistym~\cite{unity_hdrp_docs} - \item \textbf{Baked lighting} -- przedkalkulowane mapy oświetlenia (lightmaps)~\cite{unity_urp_docs} - \item \textbf{Mixed lighting} -- połączenie światła dynamicznego i~baked~\cite{unity_hdrp_docs} + \item \textbf{Real-time lighting} -- dynamiczne oświetlenie w~czasie rzeczywistym + \item \textbf{Baked lighting} -- przedkalkulowane mapy oświetlenia (lightmaps) + \item \textbf{Mixed lighting} -- połączenie światła dynamicznego i~baked \item \textbf{Global Illumination} -- Progressive Lightmapper dla~światła odbitego~\cite{gregory2018game} \end{itemize} \paragraph{Unreal Engine} \begin{itemize} - \item \textbf{Lumen} -- dynamiczne global illumination w~czasie rzeczywistym~\cite{unreal_lumen} + \item \textbf{Lumen} -- dynamiczne global illumination w~czasie rzeczywistym \item \textbf{Lightmass} -- high-quality baked lighting~\cite{gregory2018game} \item \textbf{Ray-traced lighting} -- fizycznie dokładne oświetlenie~\cite{parker2010optix} - \item \textbf{Volumetric fog} -- zaawansowane efekty atmosferyczne~\cite{unreal_lumen} + \item \textbf{Volumetric fog} -- zaawansowane efekty atmosferyczne \end{itemize} \subsection{Systemy fizyki i symulacji} @@ -67,44 +67,38 @@ Unreal oferuje Material Editor -- zaawansowany system węzłowy do~tworzenia mat \subsubsection{Rigid body physics} \paragraph{Unity} -Unity wykorzystuje NVIDIA PhysX jako~silnik fizyki~\cite{nvidia_physx, unity_physics}. +Unity wykorzystuje NVIDIA PhysX jako~silnik fizyki~\cite{nvidia_physx}. \begin{itemize} - \item \textbf{Rigidbody} -- komponent dla~obiektów fizycznych~\cite{unity_physics} - \item \textbf{Colliders} -- różne typy koliderów (box, sphere, mesh, etc.)~\cite{unity_physics} - \item \textbf{Joints} -- więzy i~połączenia (hinge, spring, fixed, etc.)~\cite{nvidia_physx} + \item \textbf{Rigidbody} -- komponent dla~obiektów fizycznych + \item \textbf{Colliders} -- różne typy koliderów (box, sphere, mesh, etc.) + \item \textbf{Joints} -- więzy i~połączenia (hinge, spring, fixed, etc.) \item \textbf{Wydajność} -- efektywne dla~setek obiektów fizycznych~\cite{messaoudi2017performance} \end{itemize} \paragraph{Unreal Engine} -Unreal przeszedł z~PhysX na~Chaos Physics -- +Unreal przeszedł z~PhysX na~Chaos Physics -- własny silnik fizyki~\cite{unreal_docs}. \begin{itemize} - \item \textbf{Chaos Physics} -- nowy, - zaawansowany system - fizyki~\cite{unreal_docs} - \item \textbf{Destruction} -- wbudowane - wsparcie dla~destrukcji - obiektów~\cite{unreal_docs} - \item \textbf{Cloth simulation} -- - symulacja tkanin~\cite{unreal_docs} - \item \textbf{Vehicles} -- zaawansowany - system pojazdów~\cite{gregory2018game} + \item \textbf{Chaos Physics} -- nowy, zaawansowany system fizyki + \item \textbf{Destruction} -- wbudowane wsparcie dla~destrukcji obiektów + \item \textbf{Cloth simulation} -- symulacja tkanin + \item \textbf{Vehicles} -- zaawansowany system pojazdów~\cite{gregory2018game} \end{itemize} \subsubsection{Systemy cząstek} \paragraph{Unity} \begin{itemize} - \item \textbf{Shuriken Particle System} -- klasyczny system cząstek~\cite{unity_vfx_graph} - \item \textbf{Visual Effect Graph} -- system cząstek GPU-based dla~milionów cząstek~\cite{unity_vfx_graph} + \item \textbf{Shuriken Particle System} -- klasyczny system cząstek + \item \textbf{Visual Effect Graph} -- system cząstek GPU-based dla~milionów cząstek \end{itemize} \paragraph{Unreal Engine} \begin{itemize} - \item \textbf{Cascade} -- legacy system cząstek~\cite{unreal_niagara} - \item \textbf{Niagara} -- zaawansowany, skalowalny system efektów wizualnych~\cite{unreal_niagara} + \item \textbf{Cascade} -- legacy system cząstek + \item \textbf{Niagara} -- zaawansowany, skalowalny system efektów wizualnych \end{itemize} \subsection{Systemy audio} @@ -113,15 +107,15 @@ własny silnik fizyki~\cite{unreal_docs}. \paragraph{Unity} \begin{itemize} - \item Obsługiwane formaty: WAV, MP3, OGG, AIFF~\cite{unity_physics} - \item Kompresja: Vorbis, MP3, ADPCM~\cite{unity_physics} + \item Obsługiwane formaty: WAV, MP3, OGG, AIFF + \item Kompresja: Vorbis, MP3, ADPCM \item Audio middleware: integracja z~Wwise, FMOD~\cite{firat2022sound} \end{itemize} \paragraph{Unreal Engine} \begin{itemize} - \item Obsługiwane formaty: WAV, OGG, FLAC~\cite{unreal_metasounds} - \item Natywna integracja z~MetaSounds~\cite{unreal_metasounds} + \item Obsługiwane formaty: WAV, OGG, FLAC + \item Natywna integracja z~MetaSounds \item Wsparcie dla~Wwise, FMOD~\cite{firat2022sound} \end{itemize} @@ -159,18 +153,18 @@ Oba silniki oferują zaawansowane systemy dźwięku przestrzennego z~obsługą~\ \paragraph{Unity} \begin{itemize} - \item Unity Profiler -- analiza wydajności CPU, GPU, pamięci~\cite{unity_profiler} - \item Console -- logi i~błędy w~czasie rzeczywistym~\cite{unity_profiler} - \item Frame Debugger -- analiza procesu renderowania klatka po~klatce~\cite{unity_profiler} - \item Memory Profiler -- szczegółowa analiza alokacji pamięci~\cite{unity_profiler} + \item Unity Profiler -- analiza wydajności CPU, GPU, pamięci + \item Console -- logi i~błędy w~czasie rzeczywistym + \item Frame Debugger -- analiza procesu renderowania klatka po~klatce + \item Memory Profiler -- szczegółowa analiza alokacji pamięci \end{itemize} \paragraph{Unreal Engine} \begin{itemize} - \item Unreal Insights -- kompleksowe narzędzie profilowania~\cite{unreal_insights} - \item Visual Logger -- wizualizacja logów w~kontekście gry~\cite{unreal_insights} - \item Session Frontend -- monitoring wielu instancji gry~\cite{unreal_insights} - \item GPU Visualizer -- analiza wydajności GPU~\cite{unreal_insights} + \item Unreal Insights -- kompleksowe narzędzie profilowania + \item Visual Logger -- wizualizacja logów w~kontekście gry + \item Session Frontend -- monitoring wielu instancji gry + \item GPU Visualizer -- analiza wydajności GPU \end{itemize} \subsection{Wsparcie dla platform docelowych} @@ -289,14 +283,14 @@ Wielkość i~aktywność społeczności deweloperskiej jest istotnym czynnikiem \paragraph{Unity} \begin{itemize} - \item \textbf{Dokumentacja oficjalna} -- ponad 5000 stron dokumentacji API~\cite{unity_urp_docs} + \item \textbf{Dokumentacja oficjalna} -- ponad 5000 stron dokumentacji API \item \textbf{Unity Learn} -- ponad 750 darmowych kursów i~tutoriali~\cite{christopoulou2017overview} \item \textbf{Certyfikacje} -- 4 poziomy certyfikacji (User, Associate, Professional, Expert)~\cite{barczak2019comparative} \end{itemize} \paragraph{Unreal Engine} \begin{itemize} - \item \textbf{Dokumentacja oficjalna} -- obszerna dokumentacja z~ponad 3000 stron~\cite{unreal_lumen} + \item \textbf{Dokumentacja oficjalna} -- obszerna dokumentacja z~ponad 3000 stron \item \textbf{Unreal Online Learning} -- ponad 200 darmowych kursów wideo~\cite{christopoulou2017overview} \item \textbf{Epic Developer Community} -- oficjalne forum wsparcia~\cite{barczak2019comparative} \end{itemize} diff --git a/latex/tex/img/nvidia_nsight.jpg b/latex/tex/img/nvidia_nsight.jpg new file mode 100644 index 0000000..62840ec Binary files /dev/null and b/latex/tex/img/nvidia_nsight.jpg differ diff --git a/latex/tex/img/sources.txt b/latex/tex/img/sources.txt new file mode 100644 index 0000000..566261b --- /dev/null +++ b/latex/tex/img/sources.txt @@ -0,0 +1,8 @@ +unity_profiler: +https://unity.com/blog/engine-platform/profiling-in-unity-2021-lts-what-when-and-how + +unreal_profiler: +https://dev.epicgames.com/documentation/unreal-engine/profiler-tool-reference?application_version=4.27 + +nvidia_nsight: +https://developer.nvidia.com/nsight-systems diff --git a/latex/tex/img/unity_profiler.avif b/latex/tex/img/unity_profiler.avif new file mode 100644 index 0000000..a751007 Binary files /dev/null and b/latex/tex/img/unity_profiler.avif differ diff --git a/latex/tex/img/unity_profiler.png b/latex/tex/img/unity_profiler.png new file mode 100644 index 0000000..315f31e Binary files /dev/null and b/latex/tex/img/unity_profiler.png differ diff --git a/latex/tex/img/unreal_profiler.png b/latex/tex/img/unreal_profiler.png new file mode 100644 index 0000000..9d279b0 Binary files /dev/null and b/latex/tex/img/unreal_profiler.png differ diff --git a/latex/tex/narzedzia-profilowania.tex b/latex/tex/narzedzia-profilowania.tex index 27bfc67..18dbf37 100644 --- a/latex/tex/narzedzia-profilowania.tex +++ b/latex/tex/narzedzia-profilowania.tex @@ -14,29 +14,43 @@ Zarówno Unity, jak i~Unreal Engine oferują własne, wbudowane narzędzia do an 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)~\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} + \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=1.0\textwidth]{tex/img/unity_profiler.png} + \caption{Interfejs Unity Profiler z~widokiem analizy wydajności CPU i~GPU.} + \label{fig:unity-profiler} +\end{figure} + \subsubsection{Unreal Insights} 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~\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} + \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_stat_commands}. +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=1.0\textwidth]{tex/img/unreal_profiler.png} + \caption{Interfejs Unreal Insights z~widokiem analizy wydajności.} + \label{fig:unreal-profiler} +\end{figure} \subsubsection{Ograniczenia narzędzi wbudowanych} @@ -56,12 +70,19 @@ Z~powyższych powodów zdecydowano się na zastosowanie zewnętrznego, niezależ 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}. +niezależnie od używanego silnika czy API graficznego~\cite{nvidia_nsight}. + +\begin{figure}[H] + \centering + \includegraphics[width=1.0\textwidth]{tex/img/nvidia_nsight.jpg} + \caption{Interfejs NVIDIA Nsight Graphics z~widokiem analizy GPU.} + \label{fig:nvidia-nsight} +\end{figure} \subsubsection{Uzasadnienie wyboru} Wybór NVIDIA Nsight jako głównego narzędzia pomiarowego podyktowany -był następującymi czynnikami~\cite{nsight_graphics_features}: +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 @@ -73,10 +94,10 @@ był następującymi czynnikami~\cite{nsight_graphics_features}: \subsubsection{Możliwości narzędzia} -NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych~\cite{nsight_graphics_userguide}: +NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych: \paragraph{Frame Profiler} -Główny moduł analizy wydajności, umożliwiający~\cite{nsight_graphics_features}: +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 @@ -86,7 +107,7 @@ Główny moduł analizy wydajności, umożliwiający~\cite{nsight_graphics_featu \end{itemize} \paragraph{GPU Trace} -Moduł do długoterminowej analizy wydajności~\cite{nsight_gpu_trace}: +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 @@ -95,7 +116,7 @@ Moduł do długoterminowej analizy wydajności~\cite{nsight_gpu_trace}: \end{itemize} \paragraph{Shader Profiler} -Narzędzie do optymalizacji shaderów~\cite{nsight_graphics_userguide}: +Narzędzie do optymalizacji shaderów: \begin{itemize} \item Analiza wydajności poszczególnych shaderów \item Identyfikacja nieefektywnych instrukcji @@ -109,7 +130,7 @@ Dane zebrane przez NVIDIA Nsight wymagają odpowiedniego przetworzenia w~celu uz \subsubsection{Eksport danych} -Nsight umożliwia eksport danych w~kilku formatach~\cite{nsight_graphics_userguide}: +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ń