Skip to main content

Unreal Extended

Github

A lightweight Unreal Engine 5 fork focused on desktop Win64 development. Built on top of the UE5 release branch — not tied to a specific engine version — so it stays close to Epic's latest stable work while layering in targeted quality-of-life, configuration, and code improvements.

Platform Focus

This fork targets Windows 64-bit desktop development. Other platforms are not a priority and may not be tested or supported.


Feature Status

See Roadmap


Safe Engine Debloating

Reduces the engine's on-disk footprint without breaking functionality — targeting a leaner setup for Win64 desktop projects that don't need the full engine distribution.

  1. uex-debloat-SetupSlim.bat - To run setup focusing on Win64 platform. If you need additional platforms, uncomment in config.txt.
  2. uex-debloat-StripExecute.bat - Main debloater. Check config.txt to comment folders to any additional platform you may need.
  3. [OPTIONAL] uex-debloat-StripDebugSymbols.bat - After engine compilation, remove .pdb files to gain nearly 100GB.

Current Result

bloat

Space Savings

TypeSavings
Default removal~40 GB
Optional removal~70 GB

What Gets Removed

The default pass strips unneed content for game development, experimental or unfinished plugins and platform SDKs unrelated to Win64 — no rebuild required.

The optional pass additionally removes PDB (Program Database) debug symbol files. The engine launches and runs normally without them. You can still attach a debugger, but symbol resolution will not work — callstacks will show raw memory addresses instead of function names, and variable inspection will be unavailable. To restore full debugging capability you need to rebuild the engine from source.

Optional Pass — Symbols Lost Without Rebuild

Without PDB files, debugger sessions are possible but effectively unreadable. Only remove PDBs if you do not intend to debug engine-level code.

Debloater Modes

The debloater script lives in the devops/ folder at the root of the repository and reads its parameters from a config.txt file in the same directory.

It ships with two operating modes:

ModeBehavior
DeletePermanently removes the targeted files. Smallest footprint, not reversible.
MoveRelocates files to a separate directory of your choice, preserving the ability to restore them later.

Use Move mode if you want to recover space but keep a safety net. Use Delete once you're confident you won't need the files back.


GT Tonemappers

Adds two alternative tonemappers alongside the engine's built-in ACES: GT7 and GT Original. Both are selectable at runtime via a single cvar and expose per-parameter controls for fine-tuning without touching post-process volumes.

Selecting a Tonemapper

rEx.Tonemapper 2
ValueTonemapper
0ACES (engine default)
1GT7
2GT Original

GT7 Tonemapper

Calibrating Brightness

rEx.GT7.PaperWhite controls the paper white point in nits. This is the primary brightness lever — adjust it before touching anything else.

RangeEffect
100 – 150Brighter image, lifted mid-tones
250Default
300 – 500Darker image, better highlight detail

Shaping the Curve

rEx.GT7.LinearSection   # Default: 0.444
rEx.GT7.ToeStrength # Default: 1.280

Post-Correction

rEx.GT7.Exposure        # Default: 1.0
rEx.GT7.Contrast # Default: 1.0
rEx.GT7.Saturation # Default: 1.0 (0.0 = grayscale)

GT Original Tonemapper

rEx.GTOrig.MaxBrightness   # Default: 1.0
rEx.GTOrig.Contrast # Default: 1.2
rEx.GTOrig.LinearStart # Default: 0.22
rEx.GTOrig.LinearLength # Default: 0.4
rEx.GTOrig.BlackTightness # Default: 1.33
rEx.GTOrig.Exposure # Default: 1.0
rEx.GTOrig.Saturation # Default: 1.0 (0.0 = grayscale)

Color Grading

Both tonemappers support the engine's color grading pipeline. Opt-in:

rEx.GT.UseColorGrading     # Default: 0   (1 = enabled)

Clustered Deferred Undeprecation

Epic deprecated the Clustered Deferred Shading path in a recent UE5 release, removing cvar access and making it unreachable without source changes. This fork fully restores it — the cvar is re-exposed and the path runs as it did before deprecation, with no workarounds needed.


Better Default Settings & Optimizations

Skeletal Mesh & Tick Optimizations

Reduces per-frame overhead for skeletal mesh components and the actor tick pipeline. Projects with many animated characters or dense tick graphs should see measurable gains without any code changes on the project side.


Forward Rendering Improvements

Enhanced MSAA Resolve

Github Reference

Anti-Aliasing Comparison

No AA
No AA
Default MSAA 2x
Default MSAA 2x
Enhanced MSAA 2x
Enhanced MSAA 2x

Improved MSAA color resolve. Replaces the default equal-weight box average with a separable Mitchell-Netravali reconstruction filter and inverse luminance weighting for HDR firefly suppression. Based on techniques from MJP's "MSAA Filtering 2.0" (MIT License).

CVars

CVarDefaultDescription
r.MSAAResolveEnhanced00: UE5 default, 1: enhanced resolve
r.MSAAResolveFilterDiameter2.0Filter width in pixels. Larger = softer, smaller = sharper

What It Does

Default UE5 resolve: Averages all MSAA sub-samples with equal weight. Ignores sub-pixel positions. Bright sub-samples can create firefly artifacts.

Enhanced resolve:

  • Samples neighboring pixels' sub-samples.
  • Weights each sample by its distance from the output pixel center using a separable Mitchell-Netravali filter kernel
  • Applies inverse luminance weighting (1/(1+lum)) to suppress HDR fireflies from specular highlights and emissives at pixel edges

Known Issues

  • r.WideCustomResolve produces a black screen for me. Looks like pre-existing UE5.7.4 bug.

Direct-Light Micro-Shadowing

Adds lightweight direct-light micro-shadowing based on Panos Zompolas' material-occlusion work:
Improving Direct Lighting Material Occlusion - Part 2

The fork uses material AO as a micro-visibility input and applies the result to final direct diffuse and specular lighting instead of modifying base material values.

Behavior

PathBehavior
MicroShadowing_PZAnalyticalSmooth analytical falloff used by default
MicroShadowing_ConeHard cone alternative kept in code
NormalDerivedMicroVisibilityCheap normal-derived fallback helper, currently not active

Current Implementation

The active path reads GBuffer.GBufferAO, evaluates micro-shadowing against AreaLight.NoL, then multiplies Lighting.Diffuse and Lighting.Specular.

This makes material AO affect direct lighting directionally, so small creases and surface cavities respond to light angle instead of only darkening indirect lighting.

Scope

This is a lightweight analytical approximation, not the full VNDF or LUT-based method from the article.


Getting Started

The fork is based on the UE5 release branch, meaning you build it the same way as a standard Unreal Engine source build from Epic's GitHub.

Prerequisites

  • Windows 10 / 11 (64-bit)
  • Visual Studio 2022 with the Game Development with C++ workload
  • At minimum 300 GB free disk space for a full build (less if using the debloating pass)
  • Epic Games account with Unreal Engine source access

Build

# Clone the fork — shallow clone fetches only the last commit
git clone --depth 1 https://github.com/mad-ben/UnrealEngine.git

# Run setup
devops/uex-debloat-SetupSlim.bat

# Generate project files
GenerateProjectFiles.bat

# Open UE5.sln in Visual Studio and build the Development Editor target
Shallow Clone & Future Updates

--depth 1 fetches only the latest commit with no history. Simple pulls will continue to work as long as the fork advances linearly. The problem arises when Git needs to find a common ancestor to reconcile changes — for example when upstream Epic commits are rebased or the fork diverges from the release branch. In that case Git cannot compute the diff and the pull will fail. For a fork tracking Epic's release branch this is a realistic scenario. Restore full history with:

git fetch --unshallow