mirror of
https://github.com/kuhyx/praca_magisterska.git
synced 2026-07-04 13:43:05 +02:00
fix: adagio slab hbox images breaking pages
This commit is contained in:
parent
01940e6ae1
commit
7404b1c173
162
.gitignore
vendored
162
.gitignore
vendored
@ -1789,3 +1789,165 @@ games/unreal/**/Saved/StagedBuilds/**/*-Linux-DebugGame.sym
|
||||
games/unreal/**/Linux/**/*-Linux-DebugGame
|
||||
games/unreal/**/Linux/**/*-Linux-DebugGame.debug
|
||||
games/unreal/**/Linux/**/*-Linux-DebugGame.sym
|
||||
latex/fonts/Adagio_Slab_Machalski.pdf
|
||||
latex/fonts/Kroje pism PW - instrukcja.pdf
|
||||
latex/fonts/PW_Adagio_Slab.zip
|
||||
latex/fonts/Source_Sans_Pro.zip
|
||||
latex/fonts/Source_Serif_Pro.zip
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Black_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Black.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Bold_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Bold.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-ExtraLight_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-ExtraLight.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Heavy_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Heavy.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Light_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Light.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Medium_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Medium.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Regular_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Regular.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-SemiBold_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-SemiBold.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Thin_italic.otf
|
||||
latex/fonts/PW_Adagio_Slab/Adagio_Slab-Thin.otf
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-black_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-black_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-black_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-black-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-black-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-black-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-bold_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-bold_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-bold_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-bold-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-bold-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-bold-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-extralight_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-extralight_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-extralight_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-extralight-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-extralight-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-extralight-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-heavy_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-heavy_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-heavy_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-heavy-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-heavy-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-heavy-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-light_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-light_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-light_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-light-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-light-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-light-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-medium_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-medium_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-medium_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-medium-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-medium-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-medium-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-regular_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-regular_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-regular_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-regular-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-regular-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-regular-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-semibold_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-semibold_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-semibold_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-semibold-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-semibold-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-semibold-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-thin_italic-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-thin_italic-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-thin_italic-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-thin-demo.html
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-thin-webfont.woff
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/adagio_slab-thin-webfont.woff2
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/generator_config.txt
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/stylesheet.css
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/specimen_files/grid_12-825-55-15.css
|
||||
latex/fonts/PW_Adagio_Slab_WEBFONTS/specimen_files/specimen_stylesheet.css
|
||||
latex/fonts/__MACOSX/._Adagio_Slab_Machalski.pdf
|
||||
latex/fonts/__MACOSX/._PW_Adagio_Slab
|
||||
latex/fonts/__MACOSX/._PW_Adagio_Slab_WEBFONTS
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Black_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Black.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Bold_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Bold.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-ExtraLight_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-ExtraLight.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Heavy_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Heavy.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Light_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Light.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Medium_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Medium.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Regular_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Regular.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-SemiBold_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-SemiBold.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Thin_italic.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab/._Adagio_Slab-Thin.otf
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._.DS_Store
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-black_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-black_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-black_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-black-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-black-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-black-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-bold_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-bold_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-bold_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-bold-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-bold-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-bold-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-extralight_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-extralight_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-extralight_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-extralight-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-extralight-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-extralight-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-heavy_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-heavy_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-heavy_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-heavy-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-heavy-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-heavy-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-light_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-light_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-light_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-light-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-light-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-light-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-medium_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-medium_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-medium_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-medium-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-medium-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-medium-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-regular_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-regular_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-regular_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-regular-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-regular-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-regular-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-semibold_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-semibold_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-semibold_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-semibold-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-semibold-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-semibold-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-thin_italic-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-thin_italic-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-thin_italic-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-thin-demo.html
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-thin-webfont.woff
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._adagio_slab-thin-webfont.woff2
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._generator_config.txt
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._specimen_files
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/._stylesheet.css
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/specimen_files/._grid_12-825-55-15.css
|
||||
latex/fonts/__MACOSX/PW_Adagio_Slab_WEBFONTS/specimen_files/._specimen_stylesheet.css
|
||||
|
||||
@ -472,13 +472,6 @@
|
||||
url = {https://archlinux.org/packages/unity-hub}
|
||||
}
|
||||
|
||||
@misc{linux_editor_does_not_redraw,
|
||||
author = {Linux Community},
|
||||
title = {Unity Editor Redraw Issue},
|
||||
year = {2025},
|
||||
note = {Accessed: 2025-01-25},
|
||||
url = {https://forum.unity.com/threads/linux-editor-redraw-issue}
|
||||
}
|
||||
|
||||
@misc{unity_mcp,
|
||||
author = {Unity Technologies},
|
||||
@ -504,13 +497,6 @@
|
||||
url = {https://unrealengine.com/download}
|
||||
}
|
||||
|
||||
@online{glau2021touhou,
|
||||
author = {Vanessa Glau},
|
||||
title = {Why Touhou Project is the most beloved},
|
||||
year = {2021},
|
||||
url = {https://vanessaglau.substack.com/p/why-touhou-project-is-the-most-beloved},
|
||||
note = {Accessed: 2026-01-24}
|
||||
}
|
||||
|
||||
@misc{unreal_wikipedia,
|
||||
author = {{Wikipedia contributors}},
|
||||
|
||||
BIN
latex/main.pdf
BIN
latex/main.pdf
Binary file not shown.
@ -14,6 +14,13 @@
|
||||
\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}
|
||||
@ -62,30 +69,29 @@
|
||||
%-------------------------------------
|
||||
\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 \\
|
||||
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,
|
||||
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
|
||||
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,
|
||||
\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~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.
|
||||
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,
|
||||
Optymalizacja, Programowanie gier, Tworzenie gier, Czas klatki, Architektura silnika,
|
||||
Kontrola wersji, GPU
|
||||
|
||||
%----------------------------------------
|
||||
@ -94,9 +100,24 @@ Kontrola wersji, GPU
|
||||
%----------------------------------------
|
||||
\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.
|
||||
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
|
||||
\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}
|
||||
|
||||
|
||||
@ -59,21 +59,43 @@
|
||||
\ifxetex
|
||||
\RequirePackage{fontspec}
|
||||
\defaultfontfeatures{Ligatures=TeX}
|
||||
% Use DejaVu fonts - widely available with full Polish character support
|
||||
\setmainfont{DejaVu Serif}
|
||||
\setsansfont{DejaVu Sans}
|
||||
\setmonofont{DejaVu Sans Mono}
|
||||
% Require Adagio Slab (bundled in repo); fail if not present
|
||||
\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}%
|
||||
\setsansfont{DejaVu Sans}
|
||||
\setmonofont{DejaVu Sans Mono}
|
||||
}{%
|
||||
\ClassError{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.}
|
||||
}
|
||||
\else\ifluatex
|
||||
\RequirePackage{fontspec}
|
||||
\defaultfontfeatures{Ligatures=TeX}
|
||||
\setmainfont{DejaVu Serif}
|
||||
\setsansfont{DejaVu Sans}
|
||||
\setmonofont{DejaVu Sans Mono}
|
||||
% Require Adagio Slab (bundled in repo); fail if not present
|
||||
\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}%
|
||||
\setsansfont{DejaVu Sans}
|
||||
\setmonofont{DejaVu Sans Mono}
|
||||
}{%
|
||||
\ClassError{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.}
|
||||
}
|
||||
\else
|
||||
% pdfLaTeX - use Fourier (Utopia) font with proper Polish support
|
||||
% pdfLaTeX - Adagio Slab requires XeLaTeX or LuaLaTeX; stop with error
|
||||
\RequirePackage[utf8]{inputenc}
|
||||
\RequirePackage[T1]{fontenc}
|
||||
\RequirePackage{fourier}
|
||||
\ClassError{wut-thesis}{Adagio Slab requires compilation with XeLaTeX or LuaLaTeX; pdfLaTeX is unsupported for this template.}{Re-run using XeLaTeX or LuaLaTeX and ensure the Adagio Slab OTF files are present in 'latex/fonts/PW_Adagio_Slab/'.}
|
||||
\fi\fi
|
||||
\RequirePackage{graphicx} % Enhanced images support
|
||||
\RequirePackage{ifluatex} % LuaTeX-specific options
|
||||
|
||||
9
latex/test_adagio.tex
Normal file
9
latex/test_adagio.tex
Normal file
@ -0,0 +1,9 @@
|
||||
% Minimal test for Adagio Slab
|
||||
\documentclass{article}
|
||||
\usepackage{fontspec}
|
||||
\defaultfontfeatures{Ligatures=TeX}
|
||||
\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}
|
||||
\begin{document}
|
||||
This is a test: Zażółć gęślą jaźń -- bold and italic.
|
||||
\textbf{Bold text.} \textit{Italic text.}
|
||||
\end{document}
|
||||
@ -2,9 +2,10 @@
|
||||
\section{Wstęp}
|
||||
|
||||
\subsection{Motywacja i cel pracy}
|
||||
Współczesny rynek gier komputerowych charakteryzuje się dynamicznym rozwojem technologicznym
|
||||
i~rosnącymi wymaganiami zarówno twórców, jak i~graczy. Wybór odpowiedniego silnika gier jest
|
||||
kluczową decyzją, która wpływa na cały proces tworzenia gry, jej wydajność oraz możliwości techniczne.
|
||||
Współczesny rynek gier komputerowych charakteryzuje się dynamicznym \\
|
||||
rozwojem technologicznym i~rosnącymi wymaganiami zarówno twórców,
|
||||
jak \\ i graczy. Wybór odpowiedniego silnika gier jest kluczową decyzją,
|
||||
która wpływa na cały proces tworzenia gry, jej wydajność oraz możliwości techniczne.
|
||||
|
||||
Celem niniejszej pracy jest porównanie wydajności i~możliwości dwóch głównych, współczesnych
|
||||
silników gier komputerowych, ze szczególnym uwzględnieniem ich wpływu na proces tworzenia gier
|
||||
@ -23,9 +24,10 @@ Praca obejmuje analizę następujących aspektów:
|
||||
\subsection{Wybór gry testowej -- gatunek bullet hell}
|
||||
\label{subsec:bullet-hell}
|
||||
|
||||
W~celu przeprowadzenia praktycznych testów wydajnościowych zdecydowano się na implementację
|
||||
gry z~gatunku \textbf{bullet hell} (dosł.~,,piekło pocisków''), znanego również jako
|
||||
\textbf{danmaku} (z~jap.~,,kurtyna pocisków'') lub \textbf{manic shooter}.
|
||||
W~celu przeprowadzenia praktycznych testów wydajnościowych \\
|
||||
zdecydowano się na implementację gry z~gatunku \\ \textbf{bullet hell}
|
||||
(dosł. ,,piekło pocisków''), znanego również jako \\ \textbf{danmaku}
|
||||
(z jap. ,,kurtyna pocisków'') lub \textbf{manic shooter}.
|
||||
|
||||
\subsubsection{Charakterystyka gatunku}
|
||||
|
||||
@ -34,8 +36,8 @@ niewielkim statkiem kosmicznym lub postacią, mierząc się z~falami przeciwnik
|
||||
ogromne ilości pocisków tworzących skomplikowane wzory na ekranie. Kluczowe cechy gatunku obejmują:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Masowa ilość pocisków} -- na ekranie jednocześnie może znajdować się od kilkuset
|
||||
do kilku tysięcy pocisków, tworzących złożone formacje geometryczne
|
||||
\item \textbf{Masowa ilość pocisków} -- na ekranie jednocześnie może znajdować się od kilkuset
|
||||
do kilku tysięcy pocisków, tworzących złożone formacje \\ geometryczne
|
||||
\item \textbf{Precyzyjne hitboxy} -- obszar kolizji postaci gracza jest znacznie mniejszy niż
|
||||
jej wizualna reprezentacja (często ograniczony do kilku pikseli), co umożliwia nawigację między
|
||||
pociskami
|
||||
@ -80,7 +82,8 @@ Gatunek bullet hell został wybrany jako podstawa testów wydajnościowych z~nas
|
||||
|
||||
\subsubsection{Parametry gry testowej}
|
||||
|
||||
Zaimplementowana gra testowa charakteryzuje się następującymi parametrami:
|
||||
Zaimplementowana gra testowa charakteryzuje się następującymi \\
|
||||
parametrami:
|
||||
|
||||
\begin{itemize}
|
||||
\item Czas rozgrywki: 90 sekund
|
||||
@ -97,7 +100,7 @@ Praca składa się z~następujących rozdziałów:
|
||||
|
||||
\begin{enumerate}
|
||||
\item \textbf{Wstęp} -- wprowadzenie do tematyki, motywacja, cel i~zakres pracy
|
||||
\item \textbf{Przegląd literatury} -- analiza istniejących badań porównawczych silników gier
|
||||
\item \textbf{Przegląd literatury} -- analiza istniejących badań \\ porównawczych silników gier
|
||||
\item \textbf{Charakterystyka silników} -- szczegółowy opis Unity i~Unreal Engine
|
||||
\item \textbf{Metodologia} -- opis metodyki badawczej i~kryteriów porównania
|
||||
\item \textbf{Analiza wywiadów} -- wyniki badań jakościowych z~deweloperami
|
||||
@ -113,7 +116,7 @@ Praca składa się z~następujących rozdziałów:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Testy wydajnościowe} -- Pomiary z~wykorzystaniem NVIDIA Nsight Graphics, zapewniające porównywalność wyników między silnikami
|
||||
\item \textbf{Wywiady z~deweloperami} -- badania jakościowe dostarczające kontekstu praktycznego użytkowania silników
|
||||
\item \textbf{Wywiady z~deweloperami} -- badania jakościowe \\ dostarczające kontekstu praktycznego użytkowania silników
|
||||
\item \textbf{Implementacja porównawcza} -- stworzenie identycznej gry w~obu silnikach, dokumentując różnice w~procesie deweloperskim
|
||||
\end{itemize}
|
||||
|
||||
|
||||
@ -12,16 +12,15 @@ Według Ullmann \cite{ullmann2022game}, współczesne silniki
|
||||
gier charakteryzują się modularną architekturą, która umożliwia
|
||||
ponowne wykorzystanie komponentów między różnymi projektami.
|
||||
|
||||
Gregory \cite{gregory2018game} w swojej pracy
|
||||
"Game Engine Architecture" przedstawia kompleksowy
|
||||
przegląd ewolucji silników gier, definiując je jako
|
||||
"oprogramowanie zaprojektowane specjalnie do tworzenia gier".
|
||||
Jego analiza pokazuje, że współczesne silniki gier składają się z
|
||||
kilku kluczowych warstw: warstwy platformy (platform layer),
|
||||
warstwy podstawowych systemów (core systems), warstwy zasobów
|
||||
(resource manager), warstwy renderingu (rendering engine),
|
||||
Gregory \cite{gregory2018game} w~swojej pracy ,,Game Engine Architecture''
|
||||
przedstawia \\ kompleksowy przegląd ewolucji silników gier, definiując je jako
|
||||
,,oprogramowanie zaprojektowane specjalnie do tworzenia gier''.
|
||||
Jego analiza pokazuje, że współczesne silniki gier składają się z~kilku
|
||||
kluczowych warstw: warstwy platformy (platform layer),
|
||||
warstwy podstawowych systemów (core systems), warstwy zasobów
|
||||
(resource manager), warstwy renderingu (rendering engine),
|
||||
systemów animacji, fizyki oraz gameplay.
|
||||
Ta architektura warstwowa umożliwia modularność i ponowne
|
||||
Ta architektura warstwowa umożliwia modularność i~ponowne \\
|
||||
wykorzystanie komponentów.
|
||||
|
||||
Pierwsze silniki gier były ściśle powiązane z konkretnym sprzętem
|
||||
@ -38,7 +37,8 @@ zaawansowanymi narzędziami do debugowania.
|
||||
\subsection{Klasyfikacja silników gier}
|
||||
|
||||
\subsubsection{Architektura silników według Gregory'ego}
|
||||
Gregory \cite{gregory2018game} przedstawia taksonomię architektur silników gier, wyróżniając kilka kluczowych typów organizacji:
|
||||
Gregory \cite{gregory2018game} przedstawia taksonomię architektur silników gier, \\
|
||||
wyróżniając kilka kluczowych typów organizacji:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Silniki obiektowe} - bazujące na hierarchii obiektów gry z dziedziczeniem
|
||||
@ -54,7 +54,12 @@ Analiza literatury pokazuje wyraźne różnice między rozwiązaniami komercyjny
|
||||
Sharif i Ameen \cite{sharif2021game} podkreślają, że wybór między rozwiązaniem komercyjnym a open source zależy głównie od budżetu projektu i wymagań dotyczących dostosowania silnika do specyficznych potrzeb.
|
||||
|
||||
\subsubsection{Silniki specjalistyczne vs. uniwersalne}
|
||||
Pavkov \cite{pavkov2017comparison} przedstawiają podział na silniki dedykowane konkretnym gatunkom gier (np. silniki do gier strategicznych czasu rzeczywistego) oraz rozwiązania uniwersalne mogące obsługiwać różnorodne typy gier. Silniki specjalistyczne oferują zoptymalizowane funkcjonalności dla określonego zastosowania, podczas gdy uniwersalne zapewniają większą wszechstronność kosztem specjalizacji.
|
||||
Pavkov \cite{pavkov2017comparison} przedstawiają podział na silniki
|
||||
dedykowane konkretnym \\ gatunkom gier (np.~silniki do gier strategicznych
|
||||
czasu rzeczywistego) oraz rozwiązania uniwersalne mogące obsługiwać
|
||||
różnorodne typy gier. Silniki specjalistyczne oferują zoptymalizowane
|
||||
funkcjonalności dla określonego zastosowania, podczas gdy uniwersalne
|
||||
zapewniają większą wszechstronność kosztem specjalizacji.
|
||||
|
||||
\subsection{Aktualny stan badań}
|
||||
|
||||
@ -90,7 +95,8 @@ nurt, przeprowadzając praktyczne porównanie silników Unity i Unreal
|
||||
Engine pod kątem wydajności w wybranych scenariuszach testowych.
|
||||
|
||||
\subsection{Trendy technologiczne}
|
||||
Ostatnie badania wskazują na rosnące znaczenie technologii ray tracing, sztucznej inteligencji w grach oraz wsparcia dla rzeczywistości wirtualnej i rozszerzonej. Masood et al. \cite{masood2022high} analizują wykorzystanie silników gier do wysokowydajnego renderowania terenu GPU, pokazując nowe kierunki rozwoju technologii renderowania.
|
||||
Ostatnie badania wskazują na rosnące znaczenie technologii ray tracing, \\
|
||||
sztucznej inteligencji w grach oraz wsparcia dla rzeczywistości wirtualnej i rozszerzonej. Masood et al. \cite{masood2022high} analizują wykorzystanie silników gier do wysokowydajnego renderowania terenu GPU, pokazując nowe kierunki rozwoju technologii renderowania.
|
||||
|
||||
Badania Firat. \cite{firat2022sound} dotyczące przestrzennego dźwięku 3D w silnikach gier wskazują na rosnące znaczenie immersyjnych doświadczeń audio jako czynnika różnicującego poszczególne rozwiązania.
|
||||
|
||||
|
||||
@ -15,11 +15,11 @@ kilkoma kluczowymi czynnikami:
|
||||
\item \textbf{Dominacja rynkowa} -- według raportu Video Game Insights,
|
||||
w~2024 roku 51\% gier wydanych na platformie Steam powstało w~Unity,
|
||||
\\ a 28\% w~Unreal Engine \cite{vgi2025engines}
|
||||
\item \textbf{Reprezentatywność podejść architektonicznych} --
|
||||
silniki reprezentują odmienne filozofie: Unity opiera się na
|
||||
języku C\# z~garbage collectorem,
|
||||
a~Unreal wykorzystuje C++ z~własnym systemem refleksji,
|
||||
makrami oraz garbage collectorem dla obiektów UObject
|
||||
\item \textbf{Reprezentatywność podejść architektonicznych} --
|
||||
silniki reprezentują odmienne filozofie: Unity opiera się na
|
||||
języku C\# z~garbage collectorem, \\ a~Unreal wykorzystuje C++
|
||||
z~własnym systemem refleksji, makrami oraz garbage collectorem
|
||||
dla obiektów UObject
|
||||
\item \textbf{Różnorodność zastosowań} -- Unity dominuje
|
||||
w~segmencie gier mobilnych (71\% z~top 1000 gier mobilnych)
|
||||
oraz wśród deweloperów indie, natomiast
|
||||
@ -50,8 +50,8 @@ deweloperów i małych studiów \cite{unity_wikipedia}. Decyzja ta
|
||||
przyczyniła się do wzrostu popularności silnika w segmencie gier
|
||||
mobilnych oraz indie.
|
||||
|
||||
Unity wykorzystuje język programowania \textbf{C\#} działający na
|
||||
platformie .NET/Mono, co zapewnia:
|
||||
Unity wykorzystuje język programowania \textbf{C\#} działający \\
|
||||
na platformie .NET/Mono, co zapewnia:
|
||||
\begin{itemize}
|
||||
\item Automatyczne zarządzanie pamięcią poprzez garbage collector
|
||||
\item Bezpieczeństwo typów i obsługę wyjątków
|
||||
@ -59,9 +59,9 @@ platformie .NET/Mono, co zapewnia:
|
||||
\end{itemize}
|
||||
|
||||
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.
|
||||
Podejście to promuje \\ kompozycję nad dziedziczeniem i ułatwia
|
||||
gdzie \\ każdy obiekt w scenie (GameObject) może posiadać dowolną
|
||||
liczbę komponentów definiujących jego zachowanie.
|
||||
Podejście to promuje kompozycję nad dziedziczeniem i ułatwia
|
||||
tworzenie modularnego kodu.
|
||||
|
||||
\subsubsection{Możliwości i funkcjonalności}
|
||||
@ -85,7 +85,7 @@ Unity oferuje kompleksowy zestaw narzędzi do tworzenia gier 2D i 3D:
|
||||
|
||||
\subsubsection{Narzędzia deweloperskie}
|
||||
|
||||
Edytor Unity zapewnia interfejs graficzny z następującymi
|
||||
Edytor Unity zapewnia interfejs graficzny z~następującymi \\
|
||||
funkcjonalnościami \cite{unity_wikipedia}:
|
||||
\begin{itemize}
|
||||
\item Hierarchiczny widok sceny z możliwością edycji w czasie
|
||||
@ -187,8 +187,8 @@ Wybór Unity i Unreal Engine jako przedmiotu porównania pozwala na
|
||||
analizę dwóch fundamentalnie różnych podejść do tworzenia gier:
|
||||
|
||||
Motywacja wyboru: Unity i Unreal Engine pozostają dwoma najpopularniejszymi silnikami
|
||||
używanymi w większości nowoczesnych produkcji — zarówno w segmencie indie, jak i w
|
||||
grach AAA — co czyni ich porównanie reprezentatywnym dla współczesnego rynku gier
|
||||
używanymi w większości nowoczesnych produkcji --- zarówno w segmencie indie, jak i w
|
||||
grach AAA --- co czyni ich porównanie reprezentatywnym dla współczesnego rynku gier
|
||||
\cite{vgi2025engines,g2gameengines}.
|
||||
|
||||
Wybór Unity i Unreal Engine jako przedmiotu porównania pozwala na
|
||||
@ -207,6 +207,6 @@ analizę dwóch fundamentalnie różnych podejść do tworzenia gier:
|
||||
oferuje bardziej zintegrowane rozwiązania
|
||||
\end{enumerate}
|
||||
|
||||
Analiza tych dwóch silników dostarcza kompleksowego obrazu współczesnego stanu
|
||||
technologii do tworzenia gier i pozwala na sformułowanie praktycznych rekomendacji dla
|
||||
deweloperów.
|
||||
Analiza tych dwóch silników dostarcza kompleksowego obrazu \\
|
||||
współczesnego stanu technologii do tworzenia gier i~pozwala na \\
|
||||
sformułowanie praktycznych rekomendacji dla deweloperów.
|
||||
|
||||
@ -89,12 +89,13 @@ progresywnie zwiększała obciążenie poprzez:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Przyspieszanie spawnu przeciwników} -- interwał między
|
||||
\\ spawnem zmniejsza się liniowo od 0,25~s (początek) \\ do 0,08~s (koniec),
|
||||
z~dodatkowym ,,finalnym szturmem'' przez \\ ostatnie 5~sekund
|
||||
\item \textbf{Zwiększanie różnorodności typów przeciwników} -- początkowo
|
||||
(0--25\% czasu) pojawiają się tylko podstawowi przeciwnicy, później
|
||||
wprowadzane są kolejno szybsze jednostki (25--50\%), strzelające wieżyczki
|
||||
(50--75\%) oraz wytrzymałe czołgi (75--100\%)
|
||||
spawnem zmniejsza się liniowo od 0,25~s (początek) do 0,08~s (koniec),
|
||||
z~dodatkowym ,,finalnym szturmem'' przez ostatnie 5~sekund
|
||||
\item \textbf{Zwiększanie różnorodności typów przeciwników} --
|
||||
początkowo \\ (0--25\% czasu) pojawiają się tylko podstawowi
|
||||
przeciwnicy, później wprowadzane są kolejno szybsze jednostki
|
||||
(25--50\%), strzelające wieżyczki (50--75\%) oraz wytrzymałe
|
||||
czołgi (75--100\%)
|
||||
\item \textbf{Maksymalna liczba przeciwników} -- limit jednoczesnych
|
||||
przeciwników na scenie wynosi 200 jednostek
|
||||
\end{itemize}
|
||||
@ -110,9 +111,9 @@ przeciwników (\emph{Fodder}) z~interwałem ok.~0,25~s.
|
||||
interwał spawnu zmniejsza się do ok.~0,17~s.
|
||||
|
||||
\paragraph{Faza 3 (60--90 sekund)}
|
||||
Wysokie obciążenie. Wszystkie typy przeciwników (w~tym strzelające \emph{Turret}
|
||||
i~wytrzymałe \emph{Tank}), interwał spawnu osiąga minimum 0,08~s.
|
||||
Ostatnie 5~sekund to ,,finalny szturm'' z~maksymalną intensywnością.
|
||||
Wysokie obciążenie. Wszystkie typy przeciwników,
|
||||
interwał spawnu osiąga minimum 0,08~s. Ostatnie 5~sekund to
|
||||
,,finalny szturm'' z~maksymalną intensywnością.
|
||||
|
||||
\subsubsection{Procedura zbierania danych}
|
||||
\label{subsubsec:procedura-zbierania}
|
||||
@ -120,7 +121,7 @@ Ostatnie 5~sekund to ,,finalny szturm'' z~maksymalną intensywnością.
|
||||
Przeprowadzono cztery sesje pomiarowe -- po dwie dla każdego silnika:
|
||||
|
||||
\begin{enumerate}
|
||||
\item \textbf{Unity -- tryb statyczny}: Gracz nieruchomy z~włączoną
|
||||
\item \textbf{Unity -- tryb statyczny}: Gracz nieruchomy z~włączoną \\
|
||||
nieśmiertelnością, pełne 90~sekund rozgrywki profilowane w~jednej sesji
|
||||
\item \textbf{Unity -- tryb dynamiczny}: Gracz aktywnie poruszający się
|
||||
i~strzelający, pełne 90~sekund rozgrywki
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\subsection{Implementacja w Unity}
|
||||
\label{subsec:impl-unity}
|
||||
|
||||
Projekt Unity został utworzony w~wersji LTS z~wykorzystaniem standardowego renderera 2D. Instalacja
|
||||
Projekt Unity został utworzony w~wersji LTS z~wykorzystaniem \\ standardowego renderera 2D. Instalacja
|
||||
silnika na systemie Linux przebiegła bezproblemowo dzięki Unity Hub
|
||||
\cite{unity_hub} \cite{unity_hub_download_arch}, który zapewnia spójne
|
||||
zarządzanie wersjami edytora i~projektami.
|
||||
@ -52,7 +52,7 @@ public Bullet Spawn(Vector2 position, Vector2 direction,
|
||||
Pula jest wstępnie rozgrzewana (\textit{warm capacity}) podczas inicjalizacji, co eliminuje alokacje podczas rozgrywki.
|
||||
|
||||
\paragraph{Singleton Pattern}
|
||||
Klasy \texttt{GameDirector} i \texttt{EnemySpawner} wykorzystują wzorzec Singleton z właściwością \texttt{Instance}, zapewniając globalny punkt dostępu do kluczowych systemów gry.
|
||||
Klasy \texttt{GameDirector} i~\texttt{EnemySpawner} wykorzystują \\ wzorzec Singleton z~właściwością \texttt{Instance}, zapewniając \\ globalny punkt dostępu do kluczowych systemów gry.
|
||||
|
||||
\subsubsection{System spawnu przeciwników}
|
||||
|
||||
@ -86,11 +86,10 @@ Podczas implementacji napotkano następujące wyzwania:
|
||||
\item Skupienie się na kodzie -- większość logiki gry zaimplementowana została w kodzie źródłowym co przyśpieszyło proces tworzenia gry
|
||||
\item Dobre wsparcie dla LLM -- unity posiada narzędzie mcp oferującą prostą integrację edytora i narzędzi AI \cite{unity_mcp}
|
||||
\end{itemize}
|
||||
|
||||
\newpage
|
||||
\subsection{Implementacja w Unreal Engine}
|
||||
\label{subsec:impl-unreal}
|
||||
|
||||
\subsubsection{Środowisko i konfiguracja projektu}
|
||||
|
||||
Instalacja Unreal Engine na systemie Linux okazała się znacznie bardziej skomplikowana niż w przypadku Unity. Dostępne są dwie ścieżki:
|
||||
|
||||
@ -101,14 +100,14 @@ Instalacja Unreal Engine na systemie Linux okazała się znacznie bardziej skomp
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{tex/img/unreal_choose_project.png}
|
||||
\includegraphics[width=0.9\textwidth]{tex/img/unreal_choose_project.png}
|
||||
\caption{Wybór projektu w Unreal Engine.}
|
||||
\label{fig:unreal_choose_project}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=1.0\textwidth]{tex/img/unreal_editor_view.png}
|
||||
\includegraphics[width=0.9\textwidth]{tex/img/unreal_editor_view.png}
|
||||
\caption{Widok edytora Unreal Engine.}
|
||||
\label{fig:unreal_editor_view}
|
||||
\end{figure}
|
||||
@ -132,7 +131,7 @@ Unreal oferuje dwa podejścia do programowania logiki gry:
|
||||
|
||||
\paragraph{Blueprinty} -- wizualny system skryptowy, który w teorii pozwala na szybkie prototypowanie bez pisania kodu.
|
||||
|
||||
W praktyce korzystanie z nich dla osoby która zna tradycyjne programowanie okazazało się frustrujące ze względu na:
|
||||
W praktyce korzystanie z nich dla osoby która zna tradycyjne programowanie okazazało się frustrujące ze względu na:
|
||||
\begin{itemize}
|
||||
\item Problemy z kontrolą wersji
|
||||
\item Trudności w debugowaniu
|
||||
@ -141,7 +140,7 @@ W praktyce korzystanie z nich dla osoby która zna tradycyjne programowanie okaz
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{C++} -- dla bardziej wydajnościowo krytycznych elementów (jak system object poolingu) zalecane jest użycie C++.
|
||||
użycie go ostatecznie okazało się bardziej intujcywne i prostsze dla projektu z uwagi na doświadczenie w pisaniu programów w
|
||||
użycie go ostatecznie okazało się bardziej intujcywne i prostsze dla projektu z uwagi na doświadczenie w pisaniu programów w
|
||||
tradycyjny sposób
|
||||
|
||||
\subsubsection{Object Pooling w Unreal}
|
||||
@ -217,6 +216,7 @@ Doświadczenia z implementacji gry bullet-hell potwierdzają, że wybór silnika
|
||||
z designerami, choć problemy \\ z kontrolą wersji stanowią wyzwanie
|
||||
\end{enumerate}
|
||||
|
||||
Implementacja gry bullet-hell w~Unity zajęła około 60\% czasu potrzebnego na implementację
|
||||
analogicznej funkcjonalności
|
||||
w Unreal Engine, głównie ze względu na natywne wsparcie 2D i prostszy system object poolingu.
|
||||
Implementacja gry bullet-hell w~Unity zajęła około 60\% czasu
|
||||
potrzebnego na implementację analogicznej funkcjonalności
|
||||
w~Unreal Engine, głównie ze względu na natywne wsparcie 2D
|
||||
i~prostszy system object poolingu.
|
||||
@ -2,7 +2,6 @@
|
||||
\section{Narzędzia profilowania wydajności}
|
||||
\label{sec:narzedzia-profilowania}
|
||||
|
||||
Obiektywne porównanie wydajności silników gier wymaga zastosowania odpowiednich narzędzi pomiarowych. W~niniejszym rozdziale przedstawiono analizę dostępnych rozwiązań oraz uzasadnienie wyboru NVIDIA Nsight jako głównego narzędzia profilowania.
|
||||
|
||||
\subsection{Wbudowane narzędzia diagnostyczne silników}
|
||||
\label{subsec:wbudowane-narzedzia}
|
||||
@ -11,7 +10,7 @@ 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)~\cite{unity_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)
|
||||
@ -19,10 +18,11 @@ Unity dostarcza rozbudowany profiler dostępny bezpośrednio w~edytorze (Window
|
||||
\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{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.
|
||||
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
|
||||
@ -33,7 +33,8 @@ Unity Profiler umożliwia również zdalne profilowanie aplikacji uruchomionej n
|
||||
|
||||
\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ą:
|
||||
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
|
||||
@ -43,7 +44,9 @@ Unreal Engine oferuje narzędzie Unreal Insights, które zastąpiło starszy sys
|
||||
\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}.
|
||||
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
|
||||
@ -54,13 +57,15 @@ Dodatkowo Unreal Engine udostępnia komendy konsolowe (np.~\texttt{stat fps}, \t
|
||||
|
||||
\subsubsection{Ograniczenia narzędzi wbudowanych}
|
||||
|
||||
Pomimo rozbudowanych możliwości, wbudowane profilery silników posiadają istotne ograniczenia w~kontekście porównawczych badań wydajnościowych:
|
||||
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
|
||||
\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.
|
||||
@ -95,7 +100,7 @@ był następującymi czynnikami:
|
||||
\subsubsection{Możliwości narzędzia}
|
||||
|
||||
NVIDIA Nsight Graphics oferuje szereg funkcjonalności istotnych dla badań wydajnościowych:
|
||||
|
||||
\newpage
|
||||
\paragraph{Frame Profiler}
|
||||
Główny moduł analizy wydajności, umożliwiający:
|
||||
\begin{itemize}
|
||||
|
||||
@ -49,7 +49,13 @@ Wybór Unreal Engine często był podyktowany specyfiką projektu lub wymaganiam
|
||||
|
||||
W zakresie dokumentacji oficjalnej respondenci wyraźnie faworyzowali Unity. Dokumentacja tego silnika była opisywana jako dogłębna i szczegółowa -- praktycznie wszystkie klasy, metody i właściwości są dokładnie opisane, a dodatkowo często zawierają działające przykłady kodu, które można bezpośrednio skopiować i uruchomić w projekcie.
|
||||
|
||||
Dokumentacja Unreal Engine była oceniana znacznie gorzej. Respondenci określali ją jako szkieletową lub wręcz nieistniejącą w praktycznym sensie. Wiele stron dokumentacji zawiera jedynie nazwę funkcji i nazwy parametrów, bez jakiegokolwiek opisu działania. Jeden z respondentów porównał czytanie dokumentacji Unreal do przeglądania plików nagłówkowych (header files), gdzie użytkownik musi samodzielnie domyślać się, co dana funkcja robi.
|
||||
Dokumentacja Unreal Engine była oceniana znacznie gorzej. Respondenci
|
||||
\\ określali ją jako szkieletową lub wręcz nieistniejącą w~praktycznym
|
||||
sensie. Wiele stron dokumentacji zawiera jedynie nazwę funkcji i~nazwy
|
||||
parametrów, bez jakiegokolwiek opisu działania. Jeden z~respondentów
|
||||
porównał czytanie dokumentacji Unreal do przeglądania plików
|
||||
nagłówkowych (header files), gdzie użytkownik musi samodzielnie
|
||||
domyślać się, co dana funkcja robi.
|
||||
|
||||
Jako pozytywny aspekt ekosystemu Unreal wskazywano fora deweloperskie, gdzie profesjonalni użytkownicy dzielą się rozwiązaniami. Problemem jest jednak to, że część najbardziej wartościowych zasobów znajduje się w zamkniętych sekcjach forum, dostępnych tylko dla wybranych firm po uzyskaniu specjalnych uprawnień od Epic Games.
|
||||
|
||||
@ -98,13 +104,16 @@ Respondenci zauważyli, że Unreal Engine jest wyraźnie zoptymalizowany pod gry
|
||||
|
||||
Czas kompilacji w Unity był identyfikowany jako znaczący problem przy większych projektach. W miarę rozrastania się bazy kodu, czas potrzebny na rekompilację po każdej zmianie rośnie.
|
||||
|
||||
Unity oferuje mechanizm Assembly Definitions jako rozwiązanie tego problemu. Bez podziału projektu na osobne assemblies każda zmiana w kodzie powoduje rekompilację całego projektu. Podział na mniejsze moduły pozwala kompilować tylko zmienione fragmenty, znacząco skracając czas iteracji.
|
||||
Unity oferuje mechanizm Assembly Definitions jako rozwiązanie tego \\
|
||||
problemu. Bez podziału projektu na osobne assemblies każda zmiana w~kodzie powoduje rekompilację całego projektu. Podział na mniejsze moduły pozwala kompilować tylko zmienione fragmenty, znacząco skracając czas iteracji.
|
||||
|
||||
\subsubsection{Stabilność środowiska}
|
||||
|
||||
Istotną różnicą między silnikami jest obsługa błędów krytycznych. W Unity gra uruchomiona w edytorze działa jako osobny proces -- gdy wystąpi błąd krytyczny, zamyka się tylko ten proces, a edytor pozostaje stabilny. W Unreal Engine silnik i gra działają jako jeden proces, więc crash w grze powoduje utratę całego edytora wraz z ewentualnymi niezapisanymi zmianami.
|
||||
|
||||
Ta różnica architekturalna ma istotne konsekwencje dla produktywności, szczególnie przy debugowaniu. Przy dużych projektach, gdzie uruchomienie silnika może trwać kilkanaście minut, każdy crash oznacza znaczną stratę czasu.
|
||||
Ta różnica architekturalna ma istotne konsekwencje dla produktywności, \\
|
||||
szczególnie przy debugowaniu. Przy dużych projektach, gdzie uruchomienie \\
|
||||
silnika może trwać kilkanaście minut, każdy crash oznacza znaczną stratę czasu.
|
||||
|
||||
\subsubsection{Kompatybilność wsteczna}
|
||||
|
||||
@ -117,7 +126,9 @@ Unreal Engine był krytykowany za problemy z kompatybilnością między wersjami
|
||||
|
||||
Współpraca z systemem Git była oceniana lepiej dla Unity ze względu na tekstową serializację assetów. Pliki scen i prefabów w Unity są zapisywane w formacie YAML, co teoretycznie umożliwia ich mergowanie. Nowoczesne narzędzia (np. merge w Rider) potrafią automatycznie rozwiązywać niektóre konflikty na scenach.
|
||||
|
||||
Pliki binarne w Unreal Engine stanowią znaczące wyzwanie. Respondenci zwracali uwagę, że nawet pliki Blueprintów, które ewidentnie mają serializację tekstową, są zapisywane na dysku jako binaria. To znacznie utrudnia współpracę wielu programistów nad tym samym projektem.
|
||||
Pliki binarne w Unreal Engine stanowią znaczące wyzwanie. Respondenci \\
|
||||
zwracali uwagę, że nawet pliki Blueprintów, które ewidentnie mają serializację \\
|
||||
tekstową, są zapisywane na dysku jako binaria. To znacznie utrudnia współpracę wielu programistów nad tym samym projektem.
|
||||
|
||||
\subsubsection{Mergowanie konfliktów}
|
||||
|
||||
@ -136,7 +147,12 @@ Jednocześnie integracja Blueprintów z kodem C++ nie jest idealna. Przejście m
|
||||
|
||||
\subsubsection{Narzędzia dla artystów}
|
||||
|
||||
Unity wymaga więcej pracy przy tworzeniu narzędzi dla osób nietechnicznych. Respondenci wskazywali, że w Unreal Engine osoby nietechniczne mają lepsze wsparcie ,,out of the box'', podczas gdy w Unity zazwyczaj trzeba przeprowadzać szkolenia lub tworzyć dedykowane narzędzia edytorowe, aby umożliwić artystom i designerom samodzielną pracę.
|
||||
Unity wymaga więcej pracy przy tworzeniu narzędzi dla osób \\
|
||||
nietechnicznych. Respondenci wskazywali, że w~Unreal Engine osoby \\
|
||||
nietechniczne mają lepsze wsparcie ,,out of the box'', podczas gdy
|
||||
w~Unity \\ zazwyczaj trzeba przeprowadzać szkolenia lub tworzyć
|
||||
dedykowane \\ narzędzia edytorowe, aby umożliwić artystom
|
||||
i~designerom samodzielną pracę.
|
||||
|
||||
\subsection{Asset Store i zasoby zewnętrzne}
|
||||
\label{subsec:asset-store}
|
||||
@ -151,7 +167,9 @@ Interesującą obserwacją było to, że najlepsze produkty z Asset Store mają
|
||||
opuszczania platformy -- twórcy zakładają własne \\ strony internetowe po osiągnięciu określonego
|
||||
poziomu popularności.
|
||||
|
||||
Unreal Marketplace przeszedł niedawno transformację w platformę Fab, co według respondentów pogorszyło doświadczenie użytkownika i zwiększyło liczbę kroków potrzebnych do pobrania darmowych zasobów.
|
||||
Unreal Marketplace przeszedł niedawno transformację w~platformę Fab, \\
|
||||
co według respondentów pogorszyło doświadczenie użytkownika \\
|
||||
i~zwiększyło liczbę kroków potrzebnych do pobrania darmowych zasobów.
|
||||
|
||||
\subsubsection{Zastosowanie assetów}
|
||||
|
||||
@ -162,9 +180,15 @@ Assety były rekomendowane głównie do prototypowania, nie do produkcji komercy
|
||||
|
||||
\subsubsection{Doświadczenia z LLM}
|
||||
|
||||
Większość respondentów miała ograniczone doświadczenia z wykorzystaniem AI w pracy z silnikami gier. Główna obserwacja dotyczyła niskiej jakości generowanego kodu -- naprawianie błędów w kodzie wygenerowanym przez ChatGPT często zajmowało więcej czasu niż napisanie rozwiązania od podstaw.
|
||||
Większość respondentów miała ograniczone doświadczenia
|
||||
\\ z~wykorzystaniem AI w~pracy z~silnikami gier. Główna obserwacja
|
||||
dotyczyła niskiej jakości generowanego kodu -- naprawianie błędów
|
||||
w~kodzie wygenerowanym przez ChatGPT często zajmowało więcej czasu
|
||||
niż napisanie rozwiązania od podstaw.
|
||||
|
||||
Jednocześnie AI było wykorzystywane skuteczniej jako substytut dokumentacji dla Unreal Engine. Pomimo częstych konfabulacji, modele językowe potrafiły naprowadzić na właściwe słowa kluczowe lub nazwy funkcji, które następnie można było zweryfikować w kodzie źródłowym silnika.
|
||||
Jednocześnie AI było wykorzystywane skuteczniej jako substytut dokumentacji dla Unreal Engine.
|
||||
Pomimo częstych konfabulacji, modele językowe potrafiły naprowadzić na właściwe słowa kluczowe
|
||||
lub nazwy funkcji, które następnie można było zweryfikować w kodzie źródłowym silnika.
|
||||
|
||||
\subsubsection{Generowanie grafik}
|
||||
|
||||
@ -175,7 +199,8 @@ Pozytywne doświadczenia zgłoszono w zakresie generowania placeholderów grafic
|
||||
|
||||
\subsubsection{Narzut silników}
|
||||
|
||||
Respondenci wskazywali, że Unity ma mniejszy narzut wydajnościowy niż Unreal dla prostych projektów. Czas ładowania projektów w Unity jest znacznie krótszy, co respondenci przypisywali domyślnie niższym rozdzielczościom tekstur i prostszym ustawieniom graficznym.
|
||||
Respondenci wskazywali, że Unity ma mniejszy narzut wydajnościowy niż \\
|
||||
Unreal dla prostych projektów. Czas ładowania projektów w~Unity jest znacznie krótszy, co respondenci przypisywali domyślnie niższym rozdzielczościom tekstur i~prostszym ustawieniom graficznym.
|
||||
|
||||
\subsubsection{Blueprinty vs C++}
|
||||
|
||||
@ -191,7 +216,7 @@ Problem garbage collectora w Unity był wielokrotnie wspominany jako znany probl
|
||||
\subsubsection{Entity Component System (ECS)}
|
||||
|
||||
Nowy system DOTS/ECS w Unity był oczekiwaną funkcjonalnością, \\ która w momencie przeprowadzania
|
||||
wywiadów została już \\ oficjalnie wydana. System ten pozwala na pisanie wysoce wydajnego,
|
||||
wywiadów została już oficjalnie wydana. \\ System ten pozwala na pisanie wysoce wydajnego,
|
||||
zorientowanego na dane kodu, kosztem większej złożoności programistycznej.
|
||||
|
||||
\subsubsection{UI Toolkit}
|
||||
@ -208,7 +233,8 @@ Część respondentów wyraziła zainteresowanie silnikiem Godot jako alternatyw
|
||||
\item Kontrowersje związane z próbą zmiany modelu licencyjnego Unity w 2023 roku
|
||||
\end{itemize}
|
||||
|
||||
Respondenci przewidywali, że jeśli Unity nie poprawi swojego wizerunku i oferty, Godot może w przyszłości stać się poważną konkurencją w segmencie gier indie.
|
||||
Respondenci przewidywali, że jeśli Unity nie poprawi swojego wizerunku \\
|
||||
i~oferty, Godot może w~przyszłości stać się poważną konkurencją w~segmencie gier indie.
|
||||
|
||||
\subsection{Podsumowanie wyników badań jakościowych}
|
||||
\label{subsec:podsumowanie-wywiady}
|
||||
@ -242,12 +268,12 @@ Na podstawie przeprowadzonych wywiadów można sformułować następujące wnios
|
||||
\item Poradniki koncentrujące się na implementacji kosztem dobrych praktyk
|
||||
\item Problemy z kompatybilnością między wersjami silników
|
||||
\end{itemize}
|
||||
|
||||
\newpage
|
||||
\subsubsection{Rekomendacje z badań}
|
||||
|
||||
Na podstawie wywiadów można zasugerować następujące kryteria wyboru silnika:
|
||||
|
||||
\begin{table}[ht]
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\caption{Rekomendacje wyboru silnika w zależności od kontekstu projektu}
|
||||
\label{tab:rekomendacje-silnikow}
|
||||
@ -268,4 +294,6 @@ Wymagania graficzne & Standardowe & Wysokie \\
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
Wyniki badań jakościowych uzupełniają obiektywne testy wydajnościowe przedstawione w rozdziale \ref{sec:testy-wydajnosci}, dostarczając kontekstu praktycznego użytkowania obu silników w rzeczywistych projektach.
|
||||
Wyniki badań jakościowych uzupełniają obiektywne testy wydajnościowe \\
|
||||
przedstawione w~rozdziale \ref{sec:testy-wydajnosci}, dostarczając \\
|
||||
kontekstu praktycznego użytkowania obu silników w~rzeczywistych \\ projektach.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user