UltraPerformance
Fixes FraudTweaks' explosion exception spam and its 13 ms/frame blocker check, removes per-frame exceptions and allocations, optional portal recursion LOD, built-in profiler. Defaults change nothing visible.
| Last updated | 2 hours ago |
| Total downloads | 75 |
| Total rating | 1 |
| Categories | Misc Quality Of Life Utility |
| Dependency string | ULTRAPerf-UltraPerformance-1.0.0 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
UltraPerformance
Performance fixes for ULTRAKILL, found by profiling the game frame by frame rather than guessing. Everything that is on by default leaves the game looking and playing exactly the same. Anything that trades visuals or AI behaviour for speed is off until you turn it on, and says what it costs.
Installation
With a mod manager (recommended): install UltraPerformance from r2modman or the Thunderstore Mod Manager. BepInEx is installed automatically as a dependency.
Manually:
- Install BepInExPack into your ULTRAKILL folder and launch the game once.
- Copy
plugins/UltraPerformance.dllfrom this download intoULTRAKILL/BepInEx/plugins/. - Launch the game.
BepInEx/LogOutput.logshould containUltraPerformance ready.
What it does
On by default
Fixes for FraudTweaks
If you use FraudTweaks 1.6.0, two of its patches cost a lot on the current game version:
- Explosions. Its explosion patch calls a portal function the game no longer has, so it throws an exception on every physics tick of every explosion near a portal. One session logged 16,866 of them, and each throw also stopped that explosion's portal damage. UltraPerformance removes just that patch; the game's own portal check, which now covers the same case, runs instead.
- Out-of-bounds blockers. Its blocker check slows down with the square of the number of blockers and allocates memory every frame. In the custom level Infinite Regression (647 blockers) it took 13 ms of a 20 ms frame. UltraPerformance swaps in a version that does the same checks in a single pass: ~48 → ~120 fps in that level's portal room, with every portal fully rendered.
Both are skipped automatically if FraudTweaks isn't installed or releases a version that fixes them.
Exception spam
FadeOut.Update and Explosion.FixedUpdate can throw a NullReferenceException every frame (one
session logged over 88,000). The exception already aborts the method, so skipping the call when it
would throw changes nothing except the cost.
Allocation fixes
Enemy.GetVisionFilter()allocated an array every physics tick for every enemy. Now cached.Idol.PickNewTarget()repeated the same vision query up to 7 × N times. Now runs it once; target choice is unchanged.Mannequin.CheckClings()used an allocating physics query while airborne. Now non-allocating.
Off by default: portal quality settings
Each portal view is a full re-render of the scene, so portal-heavy levels are where frame time goes.
These settings trade some portal detail for speed. All are in BepInEx/config/reedo.ultraperformance.cfg
under [Portal render].
| Setting | What it does | What you see |
|---|---|---|
AdaptiveRecursion |
The portal you're looking through keeps full depth; small and distant ones render fewer levels. Measured 110 → 240 fps in a portal-heavy Fraud scene. | Far-off portals-within-portals show a recently refreshed snapshot instead of a live view. |
MaxRecursions |
Caps recursion depth for every portal. | Same as above, for every portal. |
MinPixelAreaFraction, MaxDistance |
Skip portals that are tiny or far away. | Skipped portals render black. |
FallbackForAllPortals (on) is what makes the first two safe: without it, portals at the depth limit
render black.
Off by default: engine experiments
[Threads] JobWorkerCount: Unity sizes its worker thread pool from your CPU's thread count and ignores CPU pinning, so a pinned game can run more worker threads than it has cores. Try 6 or 4.[Render] NoDistanceSort: sorts opaque objects by material to cut state changes, at the cost of GPU overdraw.
Measure before keeping either one; whether they help depends on your machine.
Settings
All settings are in BepInEx/config/reedo.ultraperformance.cfg, created the first time you launch the
game with the mod. Every fix can be switched off individually there.
Numbers above are from one machine (i5-12600KF, RTX 4080 SUPER, 4K). Your results will differ.