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.
This commit is contained in:
logan committed 2026-10-14 18:15:32 -04:00
1 parent d80f85b3f6
commit 611a1a5952
102 files changed
+25853

No files matched your search

@@ -0,0 +1,194 @@
# 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?