Files
logan 611a1a5952 docs: client-perf analysis, bench harness and work journal
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.
2026-10-14 18:15:32 -04:00

195 lines
32 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Research: Effects / audio / HUD & GUI / "flavour" client mods — frame time, tick time, RAM/VRAM, startup cost (MC 1.21.1 NeoForge, Onion MC)
## Summary
Most of this category is cheap at idle: the mods with real, recurring cost are **Sound Physics Remastered** (CPU raytracing per sound, + a cloned-chunk cache for RAM), **WATUT** (network + CPU rendering other players' GUIs, with a *known dynamic-GUI breakage when Twilight Forest is installed*), **Twilight Forest's client effects** (Aurora shader, cloud precipitation — both have config toggles), **Alex's Caves' biome fog/lighting overrides** (documented "may conflict with shaders"; community key `biome_ambient_light_coloring` to disable), **Perception's chromatic-aberration post pass** (fires on explosions/warden sounds) and **Immersion Paintings/Exposure** (texture/VRAM + capture-time hitches). Everything else (tooltips, plaques, titles, Ping Wheel, Sooty Chimneys, Inventory Particles, Controlify) is event-driven HUD/particle work that only costs when visible — keep, don't tune. Fusion + Athena both being loaded means **two CTM/model engines** initialized at startup; at least one is a candidate for removal depending on which resourcepacks the pack actually ships.
## Findings
### 1. Sound Physics Remastered 1.5.1 — the biggest CPU lever in this category (VERIFIED, config source)
All keys below read from `SoundPhysicsConfig.java` on the repo's `1.21.1` branch (same file/keys as the pinned 1.5.1 line):
[SoundPhysicsConfig.java (branch 1.21.1)](https://github.com/henkelmax/sound-physics-remastered/blob/1.21.1/common/src/main/java/com/sonicether/soundphysics/config/SoundPhysicsConfig.java)
| Key (file `sound-physics-remastered.toml`) | Default | Note |
|---|---|---|
| `environment_evaluation_ray_count` | 32 (range 8–64) | Config comment: *"Decrease this value if you experience lag spikes when sounds play"* |
| `environment_evaluation_ray_bounces` | 4 (range 2–64) | Same comment — reverb bounces per sound |
| `max_occlusion_rays` | 16 (range 1–128) | occlusion ray count per sound |
| `strict_occlusion` | false | if true, occlusion uses **1 path instead of 9** — big CPU cut, slight accuracy loss |
| `sound_direction_evaluation` | true | reflection-based stereo redirection |
| `evaluate_ambient_sounds` | false | cave/nether/underwater ambients are NOT processed by default (good for the AmbientSounds stack) |
| `update_moving_sounds` / `sound_update_interval` | false / 5 | re-evaluation of discs/long sounds; interval comment: "Lower values ... more lag" |
| `max_sound_processing_distance` | 512 | sounds beyond this are not processed |
| `unsafe_level_access` | false | if true, disables the **level clone & cache** (falls back to main-thread access — slower but no clone memory) |
| `level_clone_range` / `level_clone_max_retain_ticks` / `level_clone_max_retain_block_distance` | 4 / 20 / 16 | size and lifetime of the cloned-chunk cache (RAM lever) |
- There is also a **per-sound rate config** (a generated properties file listing every registered sound event). Verified from `SoundRateConfig.java`: values are *"Max sounds per tick. Set to '-1' for unlimited, '0' to disable sound physics for that sound, >=1 to cap"* with the stated purpose *"can help prevent lag when some mod or mechanism produces hundreds of sounds per tick"*; rain, rain-above, thunder and goat horns are disabled (`0`) by default. [SoundRateConfig.java](https://github.com/henkelmax/sound-physics-remastered/blob/1.21.1/common/src/main/java/com/sonicether/soundphysics/config/SoundRateConfig.java) — this is the right lever for noisy Create/mob-farm sounds.
- Cost model: per-sound CPU raytracing (threaded, `TaskProfiler`/`performance_logging` exists to measure it — VERIFIED key `performance_logging`). Cost scales with number of simultaneous sounds, so a Create factory floor or mob farm is the worst case. [SoundPhysics.java / profiling package](https://github.com/henkelmax/sound-physics-remastered/tree/1.21.1/common/src/main/java/com/sonicether/soundphysics)
- Fork README documents a 10× sound-processing improvement over original Sound Physics (context for "it's already optimized"). [README](https://github.com/henkelmax/sound-physics-remastered#changes-to-the-original-mod)
- **Recommendation: keep + tune.** Lower `environment_evaluation_ray_count` → 16 and `ray_bounces` → 2–3, enable `strict_occlusion`, and cap the noisiest modded sounds in the sound-rates file. Helps P2 (CPU) and P0 (4C Zen2) most. Low risk, easily reversible.
### 2. AmbientSounds 6.3.8 (CreativeMD) — audio streaming & mixing, client-side (DOCUMENTED)
- Client-side mod, requires CreativeCore; config via `/cmdclientconfig`; `/ambient-debug` shows which sounds are playing. [Modrinth](https://modrinth.com/mod/ambientsounds)
- Changelog shows features are per-biome/dimension "engines" with spawn conditions (e.g., "silent dimension configuration", min-count fixes for grass/ice/rock/sand features). [CurseForge changelog](https://www.curseforge.com/minecraft/mc-mods/ambientsounds/files/6400880)
- Cost: memory for its sound library/streamed buffers + audio mixing; essentially no render cost. Community reports of lag are rare/anecdotal (COMMUNITY).
- **Recommendation: keep.** If RAM-tight on P2, reducing played sound density via its config is the lever (no specific key verified — do not guess; check `/cmdclientconfig` in-game).
### 3. Subtle Effects 1.14.3 — particle floods, but ships its own mitigations (DOCUMENTED)
- "All features can be disabled in the config menu"; documented config sections: `Entities/Dust Clouds` (dust clouds) and `Items/Item Rarity` → `Particle Display Type` = `OFF` (item rarity dots). [Modrinth FAQ](https://modrinth.com/mod/subtle-effects) / [Wiki Home](https://github.com/MincraftEinstein/SubtleEffects/wiki)
- Built-in **particle culling and particle render distance** (Modrinth description) — the mod already culls its own particles. [Modrinth](https://modrinth.com/mod/subtle-effects)
- Feature list (fireflies, pollen, sculk dust, slimes/slime trails, spark sources on torches/campfires/furnaces, replacing vanilla smoke/steam) is large but each is individually toggleable: [Wiki: Particles](https://github.com/MincraftEinstein/SubtleEffects/wiki/Particles)
- Known incompatibility to watch: fires off `Particles` video setting (features silently stop if particle setting = minimal). Coexists with other particle mods per FAQ. [Modrinth FAQ](https://modrinth.com/mod/subtle-effects)
- **Recommendation: keep + tune on P0/P1.** Dust clouds + fireflies + item rarity dots are the highest-volume effects; turn off per section if 800p Deck GPU or fill-rate-bound P1 dips. Low risk.
### 4. Perception 0.2.1 (+ OctoLib) — trails + screen shake + a real post-effect (VERIFIED config; issues)
- Source (branch 1.21.1) has three modules: `trail`, `shake`, `chromatic_aberration`. Chromatic aberration is a **fullscreen post-effect triggered by loud sounds** (explosions, warden, dragon, wither...) with per-sound `duration`/`strength`; trails are a per-entity map (`entityTrails`, `particleTrails`) that includes `minecraft:experience_orb`, arrows, allay, vex, phantom etc. Config keys verified: [ChromaticAberrationConfig.java](https://github.com/Octo-Studios/perception/blob/1.21.1/common/src/main/java/it/hurts/octostudios/perception/common/modules/chromatic_aberration/config/ChromaticAberrationConfig.java), [TrailConfig.java](https://github.com/Octo-Studios/perception/blob/1.21.1/common/src/main/java/it/hurts/octostudios/perception/common/modules/trail/config/TrailConfig.java), [module tree](https://github.com/Octo-Studios/perception/tree/1.21.1)
- Known bug (fixed line): 0.1.0.2 changelog — *"Fixed FPS leak with arrows stuck in player model"*, *"Fixed render conditions of particle trails"*. Pinned 0.2.1 postdates this. [Modrinth version notes](https://modrinth.com/mod/perception/version/9QZB1Ivx)
- Cost: trails = extra particles per moving entity (XP orbs in a Create mob/XP farm are the realistic burst case); CA = one post pass during effect duration; shake = cheap matrix offset.
- **Recommendation: keep + trim `entityTrails`** (at minimum `experience_orb`) via config map if farms are common. Helps P0/P2. Low risk.
### 5. Inventory Particles — GUI-only particle decor (DOCUMENTED, cost INFERENCE)
- Client-side, data-driven particles attached to items in inventory screens (physics fully configurable via datapack). [CurseForge](https://www.curseforge.com/minecraft/mc-mods/inventory-particles) / [Modrinth](https://modrinth.com/project/XYnKrsxH)
- Cost only while a container/inventory screen is open; scales with how many items have particle definitions. INFERENCE: negligible for frame time; slight VRAM for particle textures.
- **Recommendation: keep.**
### 6. Sooty Chimneys — per-chimney smoke particles (DOCUMENTED)
- Adds chimneys that emit smoke particles; soot accumulates over time. By mortuusars. [Modrinth](https://modrinth.com/mod/sooty-chimneys)
- Cost: only where players place chimneys; smoke is the heaviest vanilla-style particle family but counts here are tiny. INFERENCE: negligible.
- **Recommendation: keep.**
### 7. WATUT 1.2.7 — real network + CPU cost; known breakage with Twilight Forest (VERIFIED config + issue tracker)
- Config keys verified from source (`ConfigClient.java`, file `watut-client`): `sendMouseInfo`, `sendTypingSpeed`, `sendActiveGui`, `sendIdleState`, `showPlayerAnimations`, `showPlayerAnimation_Typing/_Idle/_Gui`, `showPlayerActiveNonChatGui`, `showPlayerActiveChatGui`, `particleSizeScale`, **`tickReceiveAndRenderRateOfGUIUpdates` (default 10 = GUI image of other players refreshed 2×/s; you can only increase it)**, `dontSendDetailedGUIInfo`, `dontSendItemInfo`. [ConfigClient.java](https://github.com/Corosauce/WATUT/blob/1.21.0/src/main/java/com/corosus/watut/config/ConfigClient.java)
- v1.2.7 commit: *"Workaround flickering issue ... set default to not constantly update GUI"* — the default GUI-refresh behavior was already identified as costly. [commit 71342de](https://github.com/Corosauce/WATUT/commit/71342deaf617baa997fbfc6803bad1df423b4836)
- **Known bug, directly relevant:** issue #106 — WATUT dynamic GUIs *fail to render* in a 1.21.1 large modpack, with **Twilight Forest 4.8.3281** among the triggering mods (also Cold Sweat, Dungeons Delight, Vista). Our pack has TF 4.8.3345. [Issue #106](https://github.com/Corosauce/WATUT/issues/106)
- Cost: per-player NBT packets of screen state (client↔server) [network package](https://github.com/Corosauce/WATUT/tree/1.21.0/src/main/java/com/corosus/watut/network), then the client re-renders other players' GUIs via a custom particle/screen renderer ([ScreenParticleRenderer](https://github.com/Corosauce/WATUT/blob/1.21.0/src/main/java/com/corosus/watut/client/screen/ScreenParticleRenderer.java), [PlayerStatusManagerClient](https://github.com/Corosauce/WATUT/blob/1.21.0/src/main/java/com/corosus/watut/PlayerStatusManagerClient.java)). With ~10 friends, several AFK-in-inventory, this is continuous but small; the arm/head animations are model-side (cheap).
- **Recommendation: keep (it's a social mod for a friends' server) + tune.** If the TF GUI-rendering bug bites (visual, not perf), the fallback is `dontSendDetailedGUIInfo=true`. Helps P2 (CPU) and server bandwidth. Low risk.
### 8. Traveler's Titles — overlay text on biome/dimension entry (DOCUMENTED)
- Fully client-side; customizable text size/color/duration; biome & dimension blacklists; optional custom sounds per biome/dimension entry. [Modrinth](https://modrinth.com/mod/travelers-titles)
- Cost: transient overlay + a sound on biome change. INFERENCE: negligible.
- **Recommendation: keep.**
### 9. Legendary Tooltips 1.5.5 / Advancement Plaques / Held Item Tooltips / Items Displayed — tooltip & toast dressing (DOCUMENTED, cost INFERENCE)
- Legendary Tooltips: client-side, up to 16 custom borders selected by item/mod/tag/rarity/name-color/NBT; adds shadows, centered names, 3D item previews in tooltips; requires Iceberg (+Prism). [Modrinth](https://modrinth.com/mod/legendary-tooltips), [config wiki](https://github.com/AHilyard/LegendaryTooltips/wiki/Configuration-Instructions)
- Advancement Plaques: client-side (Forge/NeoForge variant needs server only for its custom sounds, which can be disabled in config); plaque position/type configurable. [Modrinth](https://modrinth.com/mod/advancement-plaques)
- Cost: rendering cost only while a tooltip/plaque is visible; the "3D item preview" tooltip option is the only notably heavier feature (renders an item model inside the tooltip). INFERENCE: negligible in normal play.
- **Recommendation: keep.** If tooltip-heavy screens (JEI!) show hitches on P2, disable 3D previews in Legendary Tooltips config first.
### 10. Emojiful 5.2.4 — font/atlas hooks, worst history of this group (DOCUMENTED issues)
- Hooks font rendering to inject emoji glyphs (incl. animated); supports datapack emoji; client+server. [Modrinth](https://modrinth.com/mod/emojiful)
- Known bugs: game **freeze when an emoji renders** (Cottage Witch pack, older version) [Issue #98](https://github.com/InnovativeOnlineIndustries/Emojiful/issues/98); **breaks chat text output** (e.g., `/spark tps` garbled) [FTB #3886](https://github.com/FTBTeam/FTB-Modpack-Issues/issues/3886); unreadable Patchouli text [FTB #5495](https://github.com/FTBTeam/FTB-Modpack-Issues/issues/5495); rendering breaks with "When Was That Again" [Issue #15](https://github.com/InnovativeOnlineIndustries/Emojiful/issues/15).
- Cost: animated GIF emojis add texture atlas memory/upload churn (VRAM) — INFERENCE; frame cost otherwise only when emoji render in chat/signs. INFERENCE.
- **Recommendation: candidate for removal** (flavour mod with freeze/chat-corruption history, near-zero gameplay value); at minimum pin the 1.21.1 line and disable animated emoji packs. Small startup + VRAM win for P1/P2. Low risk if the group agrees.
### 11. Exposure 1.9.18 — camera rendering is a real, but occasional, hitch (VERIFIED changelog)
- Pinned 1.9.18 still contains the "preload" that exists *"to reduce the lag spike when camera is first used after launch"*; 1.9.19 removed it. **Recommend updating to ≥1.9.19** to delete that startup/first-use spike. [CHANGELOG.md (1.21.1)](https://github.com/mortuusars/Exposure/blob/1.21.1/CHANGELOG.md)
- With Iris installed, photo capture uses the **direct capture** path ("due to technical limitation"), i.e. the world is re-rendered through the viewfinder; background capture (1.8.0+) is skipped. DH+Iris also forces direct capture (1.9.7). So taking a photo = one extra full render pass → visible hitch on P0/P1. [CHANGELOG.md](https://github.com/mortuusars/Exposure/blob/1.21.1/CHANGELOG.md)
- Veil interplay: 1.9.4 removed `effective` from the background-capture allowlist and **added `veil` to the mods that force direct capture** because *"it's the one that causes issues"* — our pack runs Veil (via Lodestone/irisveil stack). [CHANGELOG.md](https://github.com/mortuusars/Exposure/blob/1.21.1/CHANGELOG.md)
- Photos in frames = image textures (small, mipmaped since 1.8.0). Photograph-in-item-frame rendering is off by default.
- **Recommendation: keep, bump to 1.9.19+**; cost is opt-in (only while photographing). Low risk.
### 12. Immersive Paintings — LoD + streaming by design; config exists (VERIFIED config wiki)
- Officially: *"Using smart level of details, caching and lazy streaming of data the performance impact is not noticeable."* [Modrinth](https://modrinth.com/mod/immersive-paintings)
- Config (documented): `thumbnailSize=128`, `lodResolutionMinimum=32`, LoD thresholds `halfResolutionThreshold=2.0`, `quarterResolutionThreshold=4.0`, `eighthResolutionThreshold=8.0`, bandwidth `maxPacketsPerSecond=20`/`packetSize=64KB`, upload caps `maxUserImageWidth/Height=4096`, `maxUserImages=1000`, `testIfSpaceEmpty=false`, `showOtherPlayersPaintings=true`. [Config wiki](https://github.com/Luke100000/ImmersivePaintings/wiki/Config)
- Cost: VRAM scales with number of large custom paintings actually loaded in view (LoD halves resolution progressively); disk cache for uploads. For P1 (6GB VRAM) lower `maxUserImages`/`thumbnailSize` if friends upload big art. INFERENCE on exact VRAM numbers.
- **Recommendation: keep + cap uploads.** Low risk.
### 13. Controlify 3.0.1 — input mod; historical FPS bug fixed upstream (DOCUMENTED)
- 2.0.3 changelog: *"Drastically improved the performance of the on-screen keyboard — There is zero performance impact anymore. It used to decrease FPS by 8x (lol)"*; also "Fix extreme FPS drops when using the on-screen keyboard" (2.0.0-beta.14). [CurseForge 2.0.3](https://www.curseforge.com/minecraft/mc-mods/controlify/files/6347289) / [Modrinth](https://modrinth.com/mod/controlify/version/1HeJe83k)
- Actively supported on 1.21.1 NeoForge. [CurseForge](https://www.curseforge.com/minecraft/mc-mods/controlify)
- **Recommendation: keep** (Deck/controller users). No open perf issue found for 3.x (INFERENCE).
### 14. Ping Wheel — tiny HUD/network mod (DOCUMENTED)
- Client+server ping markers; config via `/pingwheel config`; optional item icons on markers. [Modrinth](https://modrinth.com/mod/ping-wheel)
- Cost: a few billboard quads + small packets. INFERENCE: negligible.
- **Recommendation: keep.**
### 15. Alex's Caves 2.0.10 — biome fog/lighting overrides vs shaders; known lag reports (COMMUNITY + issue tracker)
- Known heavy cases: *"immense lag when inside toxic caves"* (65–80 → ~40 FPS) [Issue #760](https://github.com/AlexModGuy/AlexsCaves/issues/760); FPS drops looking at raycats/irritated mobs [Issue #616](https://github.com/AlexModGuy/AlexsCaves/issues/616).
- The community-maintained **"Iris Caves"** patch mod exists specifically to fix Alex's Caves cave-fog vs shaderpack conflicts (lists Complementary-family patches; notes **MakeUp Ultra Fast "isn't supported at all: it has no single cave-fog color to hook"** — relevant since MUF 9.5f is in our pack; supports 1.21.1 NeoForge + Iris). [Iris Caves on CurseForge](https://www.curseforge.com/minecraft/mc-mods/iris-caves)
- Community-quoted `alexscaves-client.toml` keys: `biome_sky_overrides`, `biome_sky_fog_overrides` (both with in-file comment "May conflict with shaders") and `biome_ambient_light_coloring` (recommended to disable for DH/visual issues). Keys as quoted from the shipped config file — treat exact names as COMMUNITY-verified until opened in-game. [r/feedthebeast: AC conflicting with shaders](https://www.reddit.com/r/feedthebeast/comments/1m6hxwh/alexs_caves_conflicting_with_my_shaders/), [DH problems thread](https://www.reddit.com/r/feedthebeast/comments/1kg37wm/i_have_some_problems_with_distant_horizons/)
- **Recommendation: keep + tune** — with Complementary Reimagined, expect AC cave-biome fog/lighting glitches (documented by the existence of Iris Caves and the AC-shaders threads); consider disabling `biome_ambient_light_coloring`/sky overrides for shader users; investigate the toxic-caves lag with spark if players visit AC often. Helps P0/P1 (GPU/shader) most. Low risk.
### 16. Twilight Forest 4.8.3345 — sky/Aurora/weather effects have config toggles (VERIFIED via official wiki)
- `twilightforest-client.toml`: **`auroraBiomes`** (default `["twilightforest:glacier"]`; set `[]` to disable the Aurora shader entirely), `cloudBlockPrecipitationDistance` (client, default `-1` = follow common; `0` disables cloud precipitation rendering), `silentCicadas`. Common config `cloudBlockPrecipitationDistance` (default 32) — *"Lower if experiencing low tick rate"*. [TF Wiki: Configuration](http://benimatic.com/tfwiki/index.php/Configuration)
- Aurora shader history: added for Glacier with configurable biomes; a crash fix mentions "Aurora Shader ... not being registered properly" [TF changelog](http://benimatic.com/tfwiki/index.php/Change_Log)
- **Known shader conflict:** TF's custom skybox conflicts with major shaderpacks (e.g. Complementary Reimagined) causing *"glaring visual distortion"*; the community **"Disable Twilight Forest Skybox"** datapack (works 1.16.5→1.21.x) removes the skybox so shaders work properly in the dimension. [CurseForge datapack](https://www.curseforge.com/minecraft/data-packs/disable-twilight-forest-skybox); same class of issue tracked as [TF issue #854](https://github.com/TeamTwilight/twilightforest/issues/854) (older, OptiFine-era).
- Also relevant from §7: WATUT's dynamic GUIs break when TF is installed ([WATUT #106](https://github.com/Corosauce/WATUT/issues/106)).
- **Recommendation: keep (core content) + tune:** if the group plays TF with shaders, ship the skybox-disable datapack (or accept the artifact); set `cloudBlockPrecipitationDistance: 0` on weak clients; `auroraBiomes=[]` only if Glacier runs badly with shaders. Helps all machines in the TF dimension; P0/P1 GPU. Low risk.
### 17. Fusion 1.3.15b + Athena 4.0.6 — two CTM engines loaded at once (VERIFIED existence/claims; cost INFERENCE)
- Athena (CTM 4.0.6 line): *"cross-platform baked model loader that features built-in support for connected textures ... unique baked models for each type to ensure optimal performance"*; its CTM is designed to "minimize unnecessary calculations". [CurseForge](https://www.curseforge.com/minecraft/mc-mods/athena). Chipped's connected textures require Athena (community). [Reddit r/feedthebeast](https://www.reddit.com/r/feedthebeast/comments/1fa8mr3/connected_texture_resource_pack_compatable_with/)
- Fusion: resourcepack library providing connected textures + custom entity models. [Modpack Index page](https://www.modpackindex.com/mod/45224/fusion-connected-textures)
- **Verified Fusion perf bug pattern:** a 1.3.x changelog entry — *"Fixed performance issues when resolving custom texture tinting with Sodium installed"* — i.e., Fusion has had Sodium-interaction hot spots worth keeping current on. [Fusion changelog (Modrinth)](https://modrinth.com/mod/fusion-connected-textures/version/1.3.1-fabric-mc26.2)
- Cost of running both: each engine registers its own model-baking/CTM hooks; both are exercised only by resourcepacks that target their respective formats. Startup time + heap for double registration is the certain cost; runtime chunk-meshing cost depends on which packs are actually enabled (Better Leaves & MT-CT-style packs ship Fusion and/or Athena variants). MT-CT notes "CTM and Athena Compat did exist at the start but are Deprecated" — i.e., pack-side support for a single engine is the norm. [MT-CT on Modrinth](https://modrinth.com/project/TjOXlt9Y)
- **Recommendation: audit, then drop one if possible.** Determine which shipped resourcepacks actually need Fusion vs Athena; if everything the pack ships is Fusion-format (or Athena-format), remove the other engine → startup + heap win (matters for P2's 8GB free RAM), zero visual change. Medium confidence the pack needs both today (Chipped→Athena is the usual blocker).
### 18. Lodestone 1.8.2 / Veil — post-processing only when triggered (DOCUMENTED)
- Veil (FoundryMC) is the rendering library under Lodestone's 1.8.x stack: custom **post-processing pipeline**, shader injection, bone-animated models. [Veil README (branch 1.21)](https://github.com/FoundryMC/Veil/blob/1.21/README.md)
- Lodestone: library for Lodestar team mods — shaders, screenshake, utilities. [9Minecraft summary](https://www.9minecraft.net/lodestone-mod/) (secondary source; treat as description)
- Cost: post chains cost frame time only while an effect is active; presence of Veil also changes behavior of other mods (see Exposure §11: Veil forces Exposure's direct-capture path). Veil+Iris compat is what irisveil 0.3.0 provides in this pack.
- **Recommendation: keep** (dependency of the Create-adjacent stack); measure once with spark whether any Veil post chain runs continuously in normal play. Open question below.
### Fleet notes
| Mod | P0 Deck (iGPU, 800p) | P1 (VRAM-bound 1060) | P2 (CPU/heap-bound) |
|---|---|---|---|
| SPR raytrace | Med (CPU spikes) | Low | **High** |
| SPR level-clone cache | Low | Low | Med (heap) |
| WATUT GUI streams | Low-Med | Low | **Med (CPU+net)** |
| Subtle Effects / Perception trails | Med (fill-rate/particles) | Med | Low-Med |
| Perception chromatic aberration | Med (post pass) | Med | Low |
| AC biome fog/shader overrides | Med-High | Med-High | Low |
| TF Aurora + cloud precip + skybox×shaders | Med | Med | Low |
| Immersive Paintings textures | Low | **Med (VRAM)** | Low (heap) |
| Exposure capture hitch | **High (during use)** | High (during use) | Low |
| Emojiful animated emoji | Low | Low-Med (VRAM) | Low (startup) |
| Fusion+Athena double engine | Startup | Startup | **Startup/heap** |
| Tooltips/plaques/titles/pings/chimneys/inv-particles | Negligible | Negligible | Negligible |
## Sources
- Kept (primary): henkelmax/sound-physics-remastered `1.21.1` branch — `SoundPhysicsConfig.java`, `SoundRateConfig.java`, README (config keys, defaults, per-sound rates, level-clone cache).
- Kept (primary): Corosauce/WATUT branch 1.21.0 — `ConfigClient.java`, commit 71342de, issue #106 (TF conflict), client screen renderer sources.
- Kept (primary): Octo-Studios/perception branch 1.21.1 — `ChromaticAberrationConfig.java`, `TrailConfig.java`, module tree; Modrinth 0.1.0.2 notes (FPS leak fix).
- Kept (primary): mortuusars/Exposure branch 1.21.1 `CHANGELOG.md` (capture paths, Iris/DH/Veil interactions, preload removal in 1.9.19).
- Kept (primary): Luke100000/ImmersivePaintings wiki/Config + Modrinth description (LoD/caching/streaming).
- Kept (primary/official wiki): benimatic.com TF Wiki Configuration (`auroraBiomes`, `cloudBlockPrecipitationDistance`, client config list) + TF Change Log (Aurora shader).
- Kept (primary): MincraftEinstein/SubtleEffects wiki + Modrinth (per-feature toggles, particle culling/render distance, config sections).
- Kept (primary): CreativeMD/AmbientSounds repo + Modrinth (client-side, `/cmdclientconfig`); CreativeMD/AmbientSounds is the source repo.
- Kept (primary): FoundryMC/Veil README (post-processing pipeline); AHilyard LegendaryTooltips & AdvancementPlaques Modrinth pages; LukenSkyne Ping Wheel Modrinth; LopyTwich Inventory Particles CurseForge; Sooty Chimneys Modrinth; YUNG Travelers Titles Modrinth; isXander/CurseForge Controlify changelogs; Athena CurseForge description; Fusion Modrinth changelog; Iris Caves CurseForge page; "Disable TF Skybox" datapack page.
- Dropped: minecrafthub.io / feed-the-mods / 9minecraft / mcfuns / minecraftbible / tlauncher / craftymania — SEO mirrors with no unique verified facts.
- Dropped: Reddit threads except the two quoting actual `alexscaves-client.toml` contents (kept as COMMUNITY evidence of key names).
## Gaps
- **AmbientSounds concrete config keys** (density/feature toggles) not pulled from source — repo is CreativeMD/AmbientSounds (branch `1.21`), config is GUI-driven (`/cmdclientconfig`); verify in-game rather than trusting names from memory.
- **Subtle Effects 1.14.3 exact TOML keys**: config is Fzzy-Config GUI sections (`Entities/Dust Clouds`, `Items/Item Rarity → Particle Display Type` documented), but per-effect key names in the file were not read from source for the pinned 1.21.1 build.
- **alexscaves-client.toml key names** come from community quotes of the generated file, not from AC source; verify by opening the shipped config once.
- **Fusion 1.3.15b-specific** changelog wasn't diffed (research surfaced the newer-line Sodium-tinting fix); check the pinned file's own changelog on CurseForge before crediting it with the fix.
- **Heap impact of SPR's level-clone cache** (`level_clone_range=4` → radius-4 chunk clones retained 20 ticks) is unquantified — worth one spark/heap measurement on P2.
- Whether any **Veil post chain runs continuously** with this exact Lodestone/Aeronautics/SSRD stack is unmeasured.
## Top levers (ranked)
| # | Lever | Expected impact | Machines helped | Risk | Confidence |
|---|---|---|---|---|---|
| 1 | SPR: `environment_evaluation_ray_count` 32→16, `environment_evaluation_ray_bounces` 4→2–3, `strict_occlusion=true`; cap noisy modded sounds in the per-sound rate config (`0`/`>=1`) | **High** (CPU) on sound-dense scenes (Create) | P2, P0 | Low (audio quality slightly degrades) | High (config verified in source) |
| 2 | Alex's Caves: disable `biome_ambient_light_coloring` (+ sky/fog overrides) for shader users; test Iris Caves-style patches if AC fog glitches under Complementary Reimagined | Med-High (GPU + visual correctness) | P0, P1 | Low | Medium (community-verified keys) |
| 3 | Twilight Forest: `cloudBlockPrecipitationDistance` client → 0; ship "Disable TF Skybox" datapack for shader play; `auroraBiomes=[]` only if Glacier stutters | Med (in-dimension FPS/stability) | P0, P1 (all in TF) | Low | High (official wiki keys) |
| 4 | WATUT: raise `tickReceiveAndRenderRateOfGUIUpdates` (e.g. 20–40) or `dontSendDetailedGUIInfo=true` if GUI streaming costs show; watch known TF conflict (#106) | Med (CPU + network, 10 players) | P2 + server | Low (visual fidelity loss) | High (config verified) |
| 5 | Perception: clear `experience_orb` (and other high-traffic) entries from `entityTrails`; keep CA sound list short | Med (particle bursts in farms) | P0, P2 | Low | High (config verified) |
| 6 | Immersive Paintings: lower `maxUserImages`, `thumbnailSize` for P1 | Med (VRAM) | P1 | Low | Medium (config verified, effect unmeasured) |
| 7 | Remove one CTM engine (Fusion or Athena) after auditing shipped resourcepacks (Chipped pins Athena) | Low-Med (startup + heap) | P2 (startup/heap) | Medium (must re-verify every resourcepack) | Medium |
| 8 | Update Exposure to ≥1.9.19 (removes first-camera-use preload lag spike) | Low (hitch removal) | All, esp. P0 | Low | High (changelog verified) |
| 9 | Emojiful: candidate for removal (or drop animated emoji packs) | Low (startup, VRAM, avoids known freeze/chat bugs) | P1, P2 | Low (social acceptability) | Medium |
| 10 | Subtle Effects: turn off `Entities/Dust Clouds` + Item Rarity dots on P0/P1 if particle-bound | Low-Med (particles/fill-rate) | P0, P1 | Low | Medium |
| 11 | Keep as-is: Legendary Tooltips (disable 3D preview if JEI tooltips hitch), Advancement Plaques, Held Item Tooltips, Items Displayed, Ping Wheel, Travelers Titles, Sooty Chimneys, Inventory Particles, Controlify, AmbientSounds, Lodestone/Veil | — | — | — | Medium-High |
## Open questions to verify by benchmark
1. SPR CPU: measure frame/tick cost with a Create factory producing dozens of concurrent sounds, at default (32 rays/4 bounces) vs 16/2 vs strict occlusion; and heap delta of the level-clone cache on P2 (spark GC/alloc view).
2. SPR per-sound rate caps: which modded sounds (Create, Alex's Mobs, Twilight Forest ambients) actually exceed the cap in a session — read `performance_logging=true` output first.
3. WATUT: with 10 players and 4–5 GUIs open, cost of GUI streaming at `tickReceiveAndRenderRateOfGUIUpdates=10` vs 30 (client CPU + server→client bandwidth); confirm whether TF 4.8.3345 still triggers #106 dynamic-GUI failure.
4. Alex's Caves: FPS in Toxic Caves (issue #760 scenario) on P0/P1, with and without `biome_ambient_light_coloring=false`, under Complementary Reimagined r5.9.3 and MakeUp Ultra Fast 9.5f (MUF has no cave-fog hook per Iris Caves — expect visual, not perf, artifacts).
5. Twilight Forest: FPS in Glacier with Aurora shader on vs `auroraBiomes=[]` under shaders; skybox artifact severity with Complementary Reimagined with/without the disable-skybox datapack.
6. Perception: XP-orb trail particle count in a Create XP farm, `entityTrails.experience_orb` on vs removed (P0 800p fill-rate).
7. Exposure: hitch duration of first camera use on 1.9.18 vs 1.9.19 on P0; and photo-capture hitch with Iris (direct capture) at 1280×800.
8. Fusion vs Athena: startup time and heap with both loaded vs each removed alone (after confirming which resourcepacks need which engine).
9. AmbientSounds: resident RAM of its sound buffers on P2 (heap dump / AllTheLeaks) and whether `/ambient-debug` shows dense overlapping ambients in forest/swamp at night.
10. Veil/Lodestone: spark profile — does any Veil post chain run continuously in normal overworld play, or only during modded events?