Everything the next agent needs to run the Phase 2 optimisation loop on a machine that can launch the client: - analysis/client-perf/: LEVERS (ranked levers + corrections), BENCH-MATRIX (world, scenes, config IDs, blocks B0-B14 with decision rules), PLAYER-TUNING, SPAWN-TUNING, research briefs, the jar scanner and its output, observed default configs, and proposed-configs/ (build.py generates tiers and bench variants and fails on unknown keys; apply_variant.py applies a variant and merges options.txt). - analysis/client-perf/bench/onion-bench/: bench-world datapack (scene teleports, Create grid, mob pen, sound storm, 120 s teleport tour). - analysis/audit/: the static recipe/dependency audit, including gen_fixes.py, which generates the shipped Paxi datapack and was never tracked. - phase0/: per-machine measurement harness (Steam Deck, 7700K/1060, 6700K/1080 Ti). - .pi/journal.md: running work log; read it first. All of it is packwizignored, so nothing here ships to players.
6.5 KiB
Onion MC: performance settings for players
These are things the pack can't set for you, plus the settings to change for your machine. Values marked (provisional) are waiting on Phase 2 benchmarks and may change.
1. Which tier are you?
| Tier | Typical machine | Examples |
|---|---|---|
| Deck | handheld or integrated graphics, shared RAM | Steam Deck, laptop iGPU |
| Mid (pack default) | 4–6 core CPU, ~6 GB VRAM graphics card | GTX 1060 6 GB, RX 580 |
| High | 8 GB+ VRAM card | GTX 1080 Ti, RTX 3060+ |
The pack's defaults are the mid tier. They're applied only when the config file doesn't exist yet. If you played before the defaults shipped, close the game and delete these files from the instance folder to pick them up on the next launch. This resets those mods' settings.
config/DistantHorizons.toml
config/sodium-options.json
config/entity_model_features.json
config/flywheel-client.toml
config/lambdynlights.toml
config/ssrd-common.toml
config/sound_physics_remastered/soundphysics.properties
Don't delete options.txt: that resets all your video, audio and control settings,
keybinds included. Set the video values in the table below by hand instead.
Then change these for your tier (provisional):
| Setting | Where | Deck | Mid | High |
|---|---|---|---|---|
| LOD render distance | Options → Distant Horizons button | 64 | 128 | 128 (192–256 if you have ≥16 GB free RAM and 6+ cores) |
| DH ambient occlusion (SSAO) | DH → Advanced → Graphics | off | off | on |
| DH quality preset | DH quick options | Low | Medium | Medium |
| Biome blend | Video Settings | off | 3×3 | 5×5 |
| Mipmap levels | Video Settings | 2 | 2 | 4 |
| Particles / entity shadows | Video Settings | Decreased / off | All / on | All / on |
| Leaves & weather quality | Sodium → Quality | Fast | Default | Default |
| Sub-level (airship) render distance | Sodium video settings slider | 16 | 16 | 32 |
| Dynamic lights | LambDynamicLights settings | Fastest, entities off | Fast | Fast, entities off |
Leave render distance at 8. The server sends 8 chunks, so anything higher loads nothing extra in multiplayer. Distant Horizons draws everything beyond that.
2. Java memory and garbage collector (Prism → Edit Instance → Settings → Java)
Use Java 21 (Temurin 21 recommended). More memory is not faster: a bigger heap makes each GC pause longer.
| Your machine | Max memory (-Xmx) |
Min memory |
|---|---|---|
| Steam Deck (16 GB shared with the GPU) | 5 GB, never above 6 | leave low (512 MB) |
| 16 GB PC | 6 GB | leave low |
| 32 GB PC | 6–8 GB | may equal max |
| PC with little free RAM (other apps/containers running) | min(6 GB, free RAM − 2 GB) | leave low |
JVM arguments (provisional; Phase 2 block B4 picks the winner). Paste one line into
Java arguments (Prism adds -Xmx itself from the memory box):
- Default (all machines): client-tuned G1
-XX:+UseG1GC -XX:MaxGCPauseMillis=37 -XX:G1HeapRegionSize=16M -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=23 -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=3 -XX:G1HeapWastePercent=20 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:MaxTenuringThreshold=1 -XX:GCTimeRatio=99 -XX:+DisableExplicitGC -XX:+PerfDisableSharedMem - 32 GB machines, if you still get stutter: Generational ZGC. Distant Horizons
recommends it in its log warning about G1.
-XX:+UseZGC -XX:+ZGenerational -XX:+DisableExplicitGC -XX:+PerfDisableSharedMem-XX:+ZGenerationalis required: on Java 21,-XX:+UseZGCalone selects the older non-generational ZGC. Avoid ZGC on the Deck or on low-RAM PCs. It needs spare memory and CPU those machines don't have.
Don't add -XX:+AlwaysPreTouch on the Deck or on low-RAM PCs. Don't copy
-XX:ShenandoahGCMode=iu from older guides: Java 21 refuses to start with it.
3. Shaders
Pending the owner's shader policy. Interim advice: shaders off is the pack default. They cost more in this pack than usual:
- With any shaderpack on, Create's GPU renderer (Flywheel) switches off, so every rotating shaft and machine is drawn the slow way, and drawn again for shadows.
- Shader shadows corrupt airships (Sable sub-levels; Iris issue #3164).
- Distant Horizons adds a shadow pass over all its terrain.
If you want shaders anyway:
| Tier | Pack | Profile (shader settings screen) |
|---|---|---|
| Deck | MakeUp – Ultra Fast | shadowless_low or shadowless_medium. These have no shadows, so no airship corruption. |
| Mid | MakeUp – Ultra Fast | shadowless_medium, or low if you accept shadow artefacts on airships |
| High | Complementary Reimagined | LOW or MEDIUM (MEDIUM = 8-chunk shadows). Avoid HIGH and above near Create builds. |
4. Resource packs
The pack downloads these but doesn't enable them:
- Fresh Animations (+ FA: Extensions): re-models and animates every vanilla mob. It's the most expensive optional visual in the pack, especially with shaders and near villages or farms. Deck: don't use it. Mid: Fresh Animations alone is OK, but skip Extensions. High: fine.
- Better Leaves: much denser leaves. The pack has no leaf-culling mod for it yet, so avoid it on Deck and mid until one is added.
5. Steam Deck
- Run Prism in Desktop Mode (flatpak from prismlauncher.org).
- Prism → Edit Instance → Settings → Environment variables:
mesa_glthread=true. Minecraft uses Mesa's OpenGL driver (radeonsi), and glthread helps the Deck's CPU-bound draw path. - Prism → Custom Commands → Wrapper command:
gamemoderun(the flatpak reaches GameMode through the desktop portal). - Native 1280×800. Cap FPS at the panel rate (60 LCD / 90 OLED) after tuning. Uncapped only matters for benchmarks.
6. Other platforms
- Windows + NVIDIA: NVIDIA Control Panel → Manage 3D settings → Program settings → your
Java
javaw.exe→ Power management mode: Prefer maximum performance. Leave Threaded optimization alone: the driver ignores it for Minecraft, and Sodium handles it. - Linux + NVIDIA: use the proprietary driver, not nouveau. Sodium already sets
__GL_THREADED_OPTIMIZATIONS=0, so you don't need to.
7. Still slow? Change these first
- Turn shaders off.
- Lower the Distant Horizons LOD distance (biggest always-on cost).
- Disable Fresh Animations.
- Lower the airship render distance (Sodium video settings).
- Lower biome blend (helps stutter while flying, not steady FPS).