⚡ UE5 Optimization Checklist

Essential performance optimization for Unreal Engine 5 projects

Rendering Optimization

Enable Nanite on Static Meshes

Convert high-poly static meshes to Nanite for automatic LOD and reduced draw calls.

💡 Tip: Right-click mesh → Nanite → Enable. Best for meshes with 1000+ triangles. Not suitable for translucent or WPO materials.

Use Lumen with Care

Optimize Lumen settings for your target platform. Consider disabling for lower-end hardware.

💡 Tip: Reduce Lumen Scene Detail, Final Gather Quality. Use Hardware Ray Tracing if supported. Test on target hardware.

Set Up Proper LODs

Ensure all meshes have appropriate LOD levels for distance-based optimization.

💡 Tip: Use automatic LOD generation or import from modeling software. Aim for 3-4 LOD levels. Test with "r.ForceLOD" console command.

Optimize Shadow Rendering

Configure shadow cascade distances and resolution for performance.

💡 Tip: Reduce Dynamic Shadow Distance, use fewer cascades, enable Virtual Shadow Maps (VSM) for better performance.

Implement Occlusion Culling

Enable and configure Visibility Culling to avoid rendering hidden objects.

💡 Tip: Use Cull Distance Volumes, Hierarchical Z-Buffer Occlusion. Visualize with "r.VisualizeOccludedPrimitives 1".

Blueprint Optimization

Minimize Tick Functions

Disable Tick on actors that don't need per-frame updates.

💡 Tip: Use Timers instead of Tick. Set "Start with Tick Enabled" to false. Profile with "stat game" to find expensive ticks.

Cache Component References

Store GetComponent calls in variables instead of calling repeatedly.

💡 Tip: Get component once in BeginPlay, store as variable. Avoid GetActorOfClass in Tick - cache on spawn instead.

Use Object Pooling

Pool frequently spawned/destroyed objects to avoid garbage collection spikes.

💡 Tip: Pre-spawn projectiles, particles, enemies. Deactivate instead of destroy. Reactivate from pool when needed.

Optimize Blueprint Nativization

Enable nativization for performance-critical blueprints (UE4 feature, deprecated in UE5).

💡 Tip: For UE5, consider converting critical blueprints to C++. Use Blueprint Function Libraries for shared logic.

Material Optimization

Reduce Material Complexity

Keep shader instruction count low, especially for materials used on many objects.

💡 Tip: Check Stats panel in Material Editor. Aim for <300 instructions. Use cheaper nodes (Lerp vs If, Multiply vs Power).

Use Material Instances

Create Material Instances instead of duplicating base materials.

💡 Tip: One base material with parameters, many instances. Reduces shader compilation and memory usage.

Optimize Texture Sampling

Minimize texture lookups and use appropriate compression settings.

💡 Tip: Combine masks into RGB channels. Use BC7 for color, BC5 for normals. Enable mipmaps. Avoid Wrap mode when possible.

Asset Optimization

Compress Textures Properly

Use correct compression settings for each texture type.

💡 Tip: BC1 (DXT1) for simple color, BC3 (DXT5) with alpha, BC5 for normal maps, BC7 for high-quality color.

Right-Size Texture Resolutions

Don't use 4K textures on small objects. Scale appropriately.

💡 Tip: Small props: 512-1024, Medium: 2048, Large/Hero: 4096. Use "r.ScreenPercentage" to test lower resolutions.

Optimize Audio Assets

Compress audio files and use streaming for music/ambient sounds.

💡 Tip: Enable streaming for sounds >5 seconds. Use Ogg Vorbis compression. Reduce quality for distant/ambient sounds.

Memory Optimization

Enable Texture Streaming

Use texture streaming pool to manage VRAM usage dynamically.

💡 Tip: Increase pool size in Project Settings. Monitor with "stat streaming". Force streaming with "r.Streaming.PoolSize".

Implement Level Streaming

Split large worlds into streaming levels to reduce memory footprint.

💡 Tip: Use World Partition (UE5) or Level Streaming Volumes. Unload distant areas. Keep persistent level minimal.

Profile Memory Usage

Regularly check memory usage and identify heavy assets.

💡 Tip: Use "memreport", "obj list", and Size Map. Look for unexpectedly large assets. Check for memory leaks.

Network Optimization (Multiplayer)

Minimize Replication

Only replicate variables that clients actually need.

💡 Tip: Use RepNotify sparingly. Set NetUpdateFrequency appropriately. Don't replicate cosmetic variables.

Implement Relevancy

Configure net relevancy to avoid sending updates for distant actors.

💡 Tip: Adjust NetCullDistanceSquared. Use Always Relevant sparingly. Test with "stat net".

Build & Package Settings

Use Shipping Build

Build in Shipping configuration for final release, not Development.

💡 Tip: Shipping removes debug code, console commands, and logging. Significantly smaller and faster.

Enable Pak File Compression

Compress pak files to reduce download and install size.

💡 Tip: Enable in Project Settings → Packaging. Use Oodle compression for best results. Test load times.

Exclude Development Content

Don't package dev-only content like test maps and debug blueprints.

💡 Tip: Use "Cook Only" filter. Mark dev folders as "Developer Content". Check packaged size regularly.

Profiling & Testing

Profile with Built-In Tools

Use UE5's profiling commands to identify bottlenecks.

💡 Tip: "stat fps", "stat unit", "stat gpu". Use GPU Visualizer (Ctrl+Shift+,). Profile worst-case scenarios.

Test on Target Hardware

Always test on minimum spec hardware, not just your dev machine.

💡 Tip: Test on console, mobile, or low-end PC as appropriate. Use Scalability settings. Hit target framerate consistently.

Save This Checklist

Print this page or save as PDF for quick reference during optimization.