
The main screen, with all the information on it.
Non-intrusive resource analysis and optimization plugin for Unreal Engine 5.x. Provides comprehensive analysis of static meshes, skeletal meshes, textures, materials, animations, audio, lighting, and post-process effects with JSON export functionality.
- Full level scan for all resource types with optional visibility filtering
- Detailed breakdown by asset category: meshes, textures, materials, animations, audio, lighting, and post-process volumes
- Memory usage estimation for each asset type
- LOD analysis and vertex/triangle counts for geometry
- Shader complexity analysis with instruction counts
- Material performance metrics (vertex/pixel shader instructions)
- Texture compression and resolution tracking
- Animation keyframe and compression analysis
- Audio sample rate and compression format detection
- Camera frustum culling for focused analysis
- Analyze only visible actors in viewport or gameplay camera
- Reduces analysis time in large levels
- JSON export of all analysis results
- Timestamp-based file naming
- Comprehensive reports saved to project Saved directory
- Integration-ready format for external tools
- Dockable editor window with intuitive UI
- Toolbar shortcuts for quick access
- Hotkey support for all analysis functions (Ctrl + NumPad keys)
- Real-time results display with sortable columns
- Memory usage color coding (green/yellow/red thresholds)
- Unreal Engine 5.3 or higher
- Editor-only plugin (works in standalone editor and PIE)
- No additional dependencies beyond standard UE modules
git clone https://github.com/vicvasper/Optilogger_UE5.x.git-
Copy the
OptiLoggerfolder to your project'sPluginsdirectoryYourProject/Plugins/OptiLogger/ -
Enable the plugin in Unreal Editor
- Open your project
- Go to Edit > Plugins
- Search for "OptiLogger"
- Check the enabled box
- Restart the editor
-
Build the project (if using C++ project)
- Right-click your
.uprojectfile - Select "Generate Visual Studio Project Files"
- Open the solution and build your project
- Right-click your
Access OptiLogger through:
- Menu: Window > OptiLogger
- Toolbar: OptiLogger icon in the Level Editor toolbar
- Analyze Level: Full scan of the current level (Ctrl+NumPad1)
- Export Report: Save results to JSON in
Saved/ResourceReport/(Ctrl+NumPad2) - Clear: Reset all analysis results (Ctrl+Delete)
- Visible Only: Toggle camera frustum filtering
- Static Meshes (Ctrl+NumPad3): Vertex count, LODs, memory usage
- Skeletal Meshes (Ctrl+NumPad4): Bone count, animations, complexity
- Textures (Ctrl+NumPad5): Resolution, compression, memory usage
- Materials (Ctrl+NumPad6): Shader complexity, texture references
- Animations (Ctrl+NumPad7): Duration, compression, keyframes
- Audio (Ctrl+NumPad8): Compression, duration, file size
- Lighting (Ctrl+NumPad9): Light actors, lightmaps, performance impact
- Post-Process (Ctrl+NumPad0): Active effects and their configuration
- Ctrl+F5: Refresh current analysis
- Ctrl+F6: Toggle on-screen display overlay
These two were bound to bare F5 and F6 in earlier versions. Because the handler is installed on Slate's pre-input listener, that made them fire from anywhere in the editor — including while typing into a text field — so pressing F5 could start a full level analysis unprompted. They now require Ctrl, like every other binding.
Opening the OptiLogger tab no longer runs an analysis automatically. The pass is synchronous and blocks the editor for its duration, which is a surprising cost for opening a panel. Press Analyze Level when you want one.
Displays aggregate statistics:
- Asset counts by category
- Total estimated memory usage
- LOD distribution
- Active effects count
Sortable table showing:
- Asset name and type
- Memory usage (color-coded)
- Detailed metrics per asset type
- Warning indicators for high-complexity assets
- Green: < 1 MB
- White: 1-10 MB
- Yellow: 10-50 MB
- Red: > 50 MB
Static Meshes
- Vertex and triangle counts per LOD
- Bounding box dimensions
- Memory estimation based on vertex data
Skeletal Meshes
- Bone hierarchy analysis
- Vertex count per LOD
- Animation references
Textures
- Resolution and aspect ratio
- Compression format detection
- Mip level count
- Virtual texture status
- Memory usage with mip chain
Materials
- Shader instruction counts (vertex/pixel)
- Complexity classification (Low/Medium/High)
- Texture reference count
- Blend mode detection (Opaque/Masked/Translucent)
Animations
- Duration and frame rate
- Keyframe count estimation
- Compression scheme detection
- Memory footprint calculation
Audio
- Sample rate and bit depth
- Channel configuration
- Streaming vs. loaded detection
- Uncompressed size estimation
Lighting
- Light type classification (Directional/Point/Spot)
- Mobility status (Static/Stationary/Movable)
- Shadow casting configuration
- Attenuation radius
- Light function detection
Post-Process
- Active effect enumeration
- Priority and blend settings
- Unbound volume detection
- Per-effect configuration status
Exported reports contain:
- Export metadata (date, engine version, plugin version)
- Categorized asset arrays
- Full metrics for each analyzed asset
- Hierarchical structure for easy parsing
Example structure:
{
"ExportDate": "2025-01-24 12:00:00",
"PluginVersion": "1.0",
"EngineVersion": "5.3.0",
"StaticMeshes": [...],
"SkeletalMeshes": [...],
"Textures": [...],
...
}- Analysis runs synchronously on the game thread and blocks the editor while it completes
- Large levels may take several seconds to analyze
- Visibility filtering significantly reduces analysis time in complex scenes
- Results are cached until cleared or refreshed
- JSON export is lightweight and fast
- Editor-only functionality (not available in packaged builds)
- Some metrics require WITH_EDITOR compilation flag
- Shader instruction counts only available in editor builds
- Animation analysis relies on loaded assets in memory
- Ensure you have a valid level open
- Check that actors exist in the scene
- Verify plugin is enabled in Edit > Plugins
- Try disabling "Visible Only" filter
- Confirm write permissions to project Saved directory
- Check disk space availability
- Verify JSON serialization hasn't been modified
- Some metrics require editor build configuration
- Ensure assets are fully loaded before analysis
- Check that asset references are valid
- OptiLogger: Main module with editor subsystem and UI
- ResourceAnalyzer: Core analysis logic
- OptiloggerWidget: Slate-based UI implementation
- OptiloggerSubsystem: Editor subsystem for input handling
UResourceAnalyzer: Asset analysis engineUOptiloggerSubsystem: Editor subsystem and input routerSOptiloggerWidget: Main UI widgetFOptiloggerCommands: Command registration and hotkeys
To add new analysis categories:
- Define analysis data struct in
ResourceAnalyzer.h - Implement analysis function in
ResourceAnalyzer.cpp - Add UI button in
OptiloggerWidget.cpp - Register hotkey in
OptiloggerCommands.cpp - Update JSON export in
ResourceAnalyzer::ExportAnalysisToJSON()
- Initial release for Unreal Engine 5.3
- Comprehensive asset analysis
- Visibility-based filtering
- JSON export functionality
- Hotkey support
- Editor UI integration
Created by Victor Rivas (@vicvasper)
For bug reports, feature requests, or contributions, please open an issue on GitHub.
- Repository: github.com/vicvasper/Optilogger_UE5.3
- Portfolio: vicvasper.github.io/README
- LinkedIn: linkedin.com/in/victorrivasperez