Default Options only seeds configs when absent, so existing players never
got the tuned settings. build.py --ship now also writes the Deck/Mid/High
tier files to config/onion-perf/<tier>/, and onion-perf-setup.{sh,ps1,bat}
(installed into the instance folder) backs up and replaces the tier's
config files and merges only the tuned video keys into options.txt,
keeping keybinds, audio and vsync/max-FPS choices.
PLAYER-TUNING: point players at the script; bench B4 GC verdict (G1 for
everyone; ZGC/Shenandoah tested worse); 16 GB PCs 5-6 GB heap.
7.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.
All values below are final (benchmarked in Phase 2; see RESULTS-proxy.md in this folder).
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 Minecraft and run the tier setup script in the instance folder to apply a tier over your current settings:
- Windows: double-click
onion-perf-setup.batin the instance folder. - Linux / Steam Deck / macOS: run
sh onion-perf-setup.shin the instance folder.
Pick your tier when prompted. The script backs up everything it changes (to
onion-perf-backup/<date-time>/), replaces these 7 config files (the deck tier also
ships config/sodium-options.json; high has the same 7 as mid), and merges the tuned
video keys into options.txt — your keybinds, audio and every other setting stay as
they are. Nothing else is touched.
Manual fallback: copy the files below from config/onion-perf/<tier>/ in the instance
folder over your own configs, and set the options.txt values from the table below by
hand (don't copy a tier's options.txt over yours — that resets all your video, audio
and control settings, keybinds included):
config/DistantHorizons.toml
config/entity_model_features.json
config/flywheel-client.toml
config/lambdynlights.toml
config/ssrd-common.toml
config/sound_physics_remastered/soundphysics.properties
config/sound_physics_remastered/sound_rates.properties
The whole tier table below is applied by the script:
| 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. Bench (B4h): 5 GB is enough; 4 GB is measurably worse (tour 1 % low −23 fps); 6 and 8 GB were no faster than 5. Don't go below 5 GB on any machine.
| 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 | 5–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 — bench block B4 settled this: the client-tuned G1 line below and the
phase-0 G1 set tied (S5 tour 1 % low 226.8 vs 228.1 fps), while Generational ZGC and
Shenandoah were measurably worse on the tour scene (1 % low 216.6 and 173.4 vs 226.8 fps).
So: the G1 line below, for everyone. Paste it 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 - Don't switch to Generational ZGC — not even on 32 GB machines. Distant Horizons recommends it in a log warning about G1, but here it tested worse (tour 1 % low 216.6 fps vs 226.8 for G1; Shenandoah was worse still at 173.4).
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:
- On its own, Flywheel (Create's GPU renderer) switches off when any shaderpack is on. The pack now ships Iris Flywheel Compat, which keeps it working under shaders (bench: Create floor p99 13.3 → 4.0 ms with MakeUp). It's unofficial, so it may lag behind Create/Iris updates; if Create machines render wrong with shaders, report it.
- 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).