Artstation Mastodon Twitter Youtube

Necdet Yavaş

Unreal Engine 5 Notes

Unreal Engine 5 Errors

Relocate Unreal Engine without deletingMove the engine to the new location and edit the path in "%ProgramData%/Epic/UnrealEngineLauncher/LauncherInstalled.dat"
Unknown structure on cookRefresh all nodes of BPs and recompile - or - Make a small change to struct and recompile BPs
Infinite loop at construction scriptChange "Editorstartupmap" in the "DefaultEngine.ini" to a different map which doesn't contain the looping or crashing BP
Your scene contains a skydome mesh with a sky material but it does not cover that part of the screenTry plugging something/animating(wind) to world position offset
Editor resets screen percentage to 66 every launchOpen project settings, go to editor performance and set "Default screen percentage mode for realtime editor viewports." to "Manual or Based on operating system's DPI scale"
Degenerate Tangent BasesImport Normals and Tangents
Compiling shaders everytimeCheck material flags (used with static lighting etc.) also deleting derived data cache may help
Animation won't update on reloadOpen your character and select the skeletal mesh. Go to optimization section in the details panel. Set "Visibility Based Anim Tick" to "Always Tick Pose and Refresh Bones"
Foliage too thin with MSAAMultiply opacity mask
Render thread crash on exitUse "Set Enable World Rendering" node first and untick "Enable". Use "Quit Game" node after that
More overridden materials on static mesh component than are referenced in source meshIf you import a mesh object with 6 material ID’s then it’s set as to having 6 materials assigned to it. If you edit the object and lower the number of materials and ID’s to 4 and “re-import” the object your original object is still looking for 6 materials but only 4 are now referenced by the object. To clear the error delete the original instance and import the edited version and and it will now only reference the 4 assigned materials.
Slow shader compilationChange "ShaderCompilerCoreCountThreshold" and "PercentageUnusedShaderCompilingThreads" in BaseEngine.ini (ini file includes explanations for what they do)
Launch VR-vr
Launch desktop-nohmd
Exec pin invisible name
  • "execute" for input pin
  • "then" for output pin
Delay node in macrosDelay node is available in Macro libraries derived from Actor
Nearly zero tangents / nearly zero bi-normalsUV problem
Unreal can't find file after movingDelete saved folder
Send2Unreal Blender addon error "Could not find an open instance of unreal"Enable the python script utilities plugin and enable "Enable Remote excecution" in projects settings
Can't disable Hololens at supported platforms
Hololens enables back at supported platforms
Delete "Hololens" folder from "Platforms" folder in project files
Customizing the editor’s toolbar buttons menu via custom pluginEnable "Display UI extension points" in editor preferences
Safe to delete foldersBinaries, Build, Intermediate, Saved, DerivedDataCache
After deleting, generate visual studio project files again. Build the project in visual studio again.
FSR 3 crashInstant crouch causes crash with FSR 3 Frame Generation. Use your own crouch logic with timeline, lerp and boolean.
Packaged game freeze on exitCheck loops, menu, player.
Windows 11 doesn't like windowedfullscreen. Switch to windowed mode. Uncheck borderless window.
Physics objects save after simulatingYou can press K while simulating the game to save object state (for example last position and rotation of an object after physics simulation).
Asset searchControl+P opens asset windows for quick search
Resize methodr.SceneRenderTargetResizeMethod - Control the scene render target resize method (This value is only used in game mode and on windowing platforms.)
0: Resize to match requested render size (Default) (Least memory use, can cause stalls when size changes e.g. ScreenPercentage)
1: Fixed to screen resolution
2: Expands to encompass the largest requested render dimension. (Most memory use, least prone to allocation stalls)
Camera fade doesn't workChange duration to something bigger than 0, even 0.01 works.
Blueprint nodes don't execute or overlap/override each other.Put delay node with 0.0 seconds between commands. This delays just 1 frame so not everything tries to execute at the same frame.

Unreal Engine 5 Save File

Unreal Engine uses .sav extension

In development platforms, save files are located in the project's "Saved" folder

Packaged game in shipping configuration saves are located in
Linux: /home/username/.config/Epic/GameName
Windows: C:\Users\username\AppData\Local\GameName

Editor theme location - Engine\Content\Slate\Themes

Unreal Engine 5 Editor Config


# Naming convention rules (note: currently need to be ordered from more to less specific)

cpp_naming_rule.aactor_prefixed.symbols                    = aactor_class                      = aactor_style

cpp_naming_rule.swidget_prefixed.symbols                   = swidget_class                     = swidget_style

cpp_naming_rule.uobject_prefixed.symbols                   = uobject_class                     = uobject_style

cpp_naming_rule.booleans_prefixed.symbols                 = boolean_vars                   = boolean_style

cpp_naming_rule.structs_prefixed.symbols                   = structs                     = unreal_engine_structs

cpp_naming_rule.enums_prefixed.symbols                     = enums                       = unreal_engine_enums

cpp_naming_rule.templates_prefixed.symbols                 = templates                   = unreal_engine_templates

cpp_naming_rule.general_names.symbols                      = all_symbols                        = unreal_engine_default

# Naming convention symbols         

cpp_naming_symbols.aactor_class.applicable_kinds           = class
cpp_naming_symbols.aactor_class.applicable_type            = AActor

cpp_naming_symbols.swidget_class.applicable_kinds          = class
cpp_naming_symbols.swidget_class.applicable_type           = SWidget

cpp_naming_symbols.uobject_class.applicable_kinds          = class
cpp_naming_symbols.uobject_class.applicable_type           = UObject

cpp_naming_symbols.boolean_vars.applicable_kinds          = local,parameter,field
cpp_naming_symbols.boolean_vars.applicable_type           = bool

cpp_naming_symbols.enums.applicable_kinds                  = enum

cpp_naming_symbols.templates.applicable_kinds              = template_class

cpp_naming_symbols.structs.applicable_kinds                = struct

cpp_naming_symbols.all_symbols.applicable_kinds            = *

# Naming convention styles

cpp_naming_style.unreal_engine_default.capitalization      = pascal_case
cpp_naming_style.unreal_engine_default.required_prefix     =
cpp_naming_style.unreal_engine_default.required_suffix     =
cpp_naming_style.unreal_engine_default.word_separator      =

cpp_naming_style.unreal_engine_enums.capitalization        = pascal_case
cpp_naming_style.unreal_engine_enums.required_prefix       = E
cpp_naming_style.unreal_engine_enums.required_suffix       =
cpp_naming_style.unreal_engine_enums.word_separator        =

cpp_naming_style.unreal_engine_templates.capitalization    = pascal_case
cpp_naming_style.unreal_engine_templates.required_prefix   = T
cpp_naming_style.unreal_engine_templates.required_suffix   =
cpp_naming_style.unreal_engine_templates.word_separator    =

cpp_naming_style.unreal_engine_structs.capitalization      = pascal_case
cpp_naming_style.unreal_engine_structs.required_prefix     = F
cpp_naming_style.unreal_engine_structs.required_suffix     =
cpp_naming_style.unreal_engine_structs.word_separator      =

cpp_naming_style.uobject_style.capitalization              = pascal_case
cpp_naming_style.uobject_style.required_prefix             = U
cpp_naming_style.uobject_style.required_suffix             =
cpp_naming_style.uobject_style.word_separator              =

cpp_naming_style.aactor_style.capitalization               = pascal_case
cpp_naming_style.aactor_style.required_prefix              = A
cpp_naming_style.aactor_style.required_suffix              =
cpp_naming_style.aactor_style.word_separator               =

cpp_naming_style.swidget_style.capitalization              = pascal_case
cpp_naming_style.swidget_style.required_prefix             = S
cpp_naming_style.swidget_style.required_suffix             =
cpp_naming_style.swidget_style.word_separator              =

cpp_naming_style.boolean_style.capitalization              = pascal_case
cpp_naming_style.boolean_style.required_prefix             = b
cpp_naming_style.boolean_style.required_suffix             =
cpp_naming_style.boolean_style.word_separator              =

Unreal Engine 5 Optimization

stat unit
  • Game: C++/Blueprints - CPU bound
  • Draw: CPU render
  • GPU: GPU render
stat gpuGPU
stat rhiCPU render tasks - Draw calls
stat gameCPU logic tasks - Ticks
stat startfile
stat stopfile
For CPU profiling - Records performance metrics
Inspect using frontend
stat streamingTextures
Ctrl + Shift + ,GPU Profiler

Drawcalls are much more expensive than triangles

Smaller opacity masks are better for performance

Early Z-pass - Opaque and masked meshes - To reduce overdraw

Meshes: Triangle/Poly Count

Complex shaders/materials cost more when they are closer to the camera (when they take up more screen space)

Tools - Audit - Statistics

r.Tonemapper.GrainQuantization 0 = Minor performance gain

Disable separate translucency if you don't need it

Mask material only in early Z pass - Enabled-to reduce overdraw on masked objects

Enable CSM caching

Check Quad Overdraw and Shader Complexity

Unreal Engime 5 Materials

Use Pixel Normal Offset instead of Index of Refraction for large surfaces

Optimization Tips

Keep shader count low

If node calculates both sides

Some nodes are slower than others

Material Blend Modes
Blend ModeFormulaDescription
OpaqueFinal color = Source colorCompatible with lighting. Material will draw on top of the background.
MaskedFinal color = Source color if OpacityMask > OpacityMaskClipValueCompatible with lighting.
TranslucentFinal color = Source color * Opacity + Dest color * (1 - Opacity)Not compatible with dynamic lighting.
AdditiveFinal color = Source color + Dest colorNot compatible with dynamic lighting.
ModulateFinal color = Source color x Dest colorNot compatible with dynamic lighting, or fog, unless this is a decal material.
Alpha CompositeFinal Color = Source Color + Dest Color * (1 - Source Opacity)
Alpha HoldoutFinal Color = Dest Color * (1 - Source Opacity)Not compatible with dynamic lighting.

Shading Models
Shading ModelDescription
UnlitEmissive Color
SubsurfaceSimulates subsurface scattering
Preintegrated SkinCheaper subsurface with less accuracy
Clear CoatSimulates multilayer materials
Subsurface ProfileHigh-end skin rendering
Two Sided FoliageSubsurface scattering for foliage
HairSimulates multiple specular highlights
ClothIncludes a thin "fuzz" layer across the surface
EyeSimulates the surface of an eye
Single Layer WaterEnables to achieve the effect of a transparent water surface while using an Opaque Blend Mode
Thin TranslucentSupports physically based translucent Material types
From Material ExpressionEnables combining multiple shading models into a single material

Unreal Engine 5 Packaging

Max chunk size is in bytes - 1 MB is 1000000 byte

Post process

FXAAFast Approximate Anti-Aliasing
TAATemporal Anti-Aliasing
MSAAMultisample Anti-Aliasing
TSRTemporal Super Resolution

Nav Mesh at Runtime

Project Settings - Engine Navigation Mesh - Runtime - Runtime Generation: Dynamic

Streaming Pool Fix

Check texture sizes - Should be power of 2 - Doesn't have to be square (512x1024, 4096x1024)

Check mip gen settings in texture settings

Uncheck never stream in texture settings

Optional (editor related) - Uncheck defer compression in texture settings


Make mesh root

GPU Lightmass

Use stationary lighting so you can get dynamic shadows too

Check use area shadows for stationary lights at Directional Light settings

Unlit materials won't bake any shadows

World position offset not supported

Third Person to First Person

Duplicate third person character

Delete camera boom

Attach follow camera to mesh

Parent camera to head bone

Adjust the position and rotation

Set use pawn control rotation to true on camera

Set use controller rotation yaw to true on thirdpersoncharacter

Dynamic Lighting - Deferred

Directional Light - Movable - Atmosphere Sun Light: True

Place Sky Atmosphere

Exponential Height Fog - Start Distance: Max

SkyLight - Movable - Real Tme Capture:True

Post Process Volume - Unbound

Volumetric Cloud

Project Settings - Support Sky Atmosphere Affecting Height Fog: True