-
Notifications
You must be signed in to change notification settings - Fork 0
Features
Entity Culling skips rendering entities that are not visible to the player, reducing GPU load significantly in entity-dense areas.
- Frustum Culling: Entities outside the camera view are never sent to the GPU
- Occlusion Culling: A raycast checks if solid blocks hide the entity
- Distance Culling: Entities beyond a configurable distance are not rendered
- Async Occlusion: Raycasts are spread across multiple ticks to prevent frame spikes
See Configuration for full options.
- Low: Frustum culling alone saves 10-30% entity render time
- Medium: Adding occlusion culling saves 20-50% in complex scenes
- High: Distance culling + async occlusion provides the best experience
Distant entities are render-throttled to reduce GPU load without removing them entirely.
- Entities within the near distance render every tick
- Entities beyond the far distance render every 2nd or 3rd tick
- XOR-based distribution ensures throttling is staggered across entities
See Configuration for full options.
- Reduces entity render time by 30-50% for distant entities
- No visual impact at typical viewing distances
Hides entity name tags beyond a configurable distance with hysteresis to prevent flickering.
- Name tags beyond
maxDistanceare hidden - A hysteresis dead-band prevents rapid toggling at the threshold
- Visibility is re-evaluated every
checkIntervalTicksto reduce overhead
See Configuration for full options.
Skips rendering distant block entities such as chests, furnaces, signs, banners, item frames, and armor stands.
- Distance-based culling only (no occlusion raycast)
- Configurable maximum distance per profile
See Configuration for full options.
Controls particle spawning and lifetime to reduce CPU and GPU overhead.
- Hard cap on total live particles
- Distance-based density LOD:
- Near (<
midDistance): 100% spawn rate - Mid (
midDistancetomaxDistance): ~50% spawn rate via position-based hash - Far (>
maxDistance): 0% spawn rate
- Near (<
- Adaptive distance multiplier based on current FPS
See Configuration for full options.
Caps frame rate when the Minecraft window is unfocused or minimized to reduce GPU thermals and power usage.
- Detects window focus state via Fabric API
- Applies a configurable FPS cap using post-frame sleep
- Separate caps for unfocused and minimized states
See Configuration for full options.
Temporarily tightens all culling distances after joining a world to prevent frame spikes during chunk loading.
- Detects world join via Fabric client events
- Starts culling distances at 35% of normal values
- Eases linearly back to 100% over the grace period
- Async occlusion batch increases 3x during grace period
See Configuration for full options.
Reduces HUD rendering overhead through dirty-flag tracking and throttling.
- Hotbar Caching: Tracks item slot changes and only re-renders changed slots
- HUD Throttling: Limits health/food/armor/XP/air updates to reduce draw calls
See Configuration for full options.
Automatically adjusts culling distances based on current FPS to maintain smooth gameplay.
- Monitors smoothed FPS using exponential moving average
- Reduces culling distances when FPS drops below thresholds
- Restores distances after a configurable delay
- Singleplayer mode uses more aggressive multipliers
See Configuration for adaptive settings.
FPSFlow 1.8.1 includes reimplemented optimization primitives inspired by CaffeineMC's Lithium mod. These are not mixins into Minecraft code; they are internal utilities that reduce allocation overhead and improve cache efficiency.
- Reduces sine lookup table from 256 KB to 64 KB
- Uses trigonometric identities to eliminate redundant entries
- Maintains bit-for-bit compatibility with Minecraft's MathHelper
- Prevents repeated defensive array copies from
Direction.values() - Every call to
Enum.values()allocates a new array - Cached references eliminate this overhead in hot code paths
- Thread-local mutable BlockPos for iteration contexts
- Efficient long-packing for hash-based collections
- Reduces GC pressure in chunk scanning and neighbor-iteration loops
- Pre-sized HashMap/HashSet factories with optimal initial capacities
- Identity-based sets for entity classification
- Utility methods that avoid common allocation pitfalls
| Feature | FPSFlow | EntityCulling | Sodium | Lithium |
|---|---|---|---|---|
| Entity Culling | Yes | Yes | No | No |
| Entity LOD | Yes | No | No | No |
| Nameplate Culling | Yes | No | No | No |
| Block Entity Culling | Yes | No | No | No |
| Particle Optimization | Yes | No | No | Yes |
| Background FPS Limiter | Yes | No | No | No |
| World Join Optimizer | Yes | No | No | No |
| GUI Optimizer | Yes | No | No | No |
| Adaptive Renderer | Yes | No | No | No |
| Compact Sine Table | Yes | No | No | Yes |
| Direction Caching | Yes | No | No | Yes |
FPSFlow is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
- You are free to use, modify, and distribute FPSFlow
- If you run a modified version on a server, you must provide the source code to users
- See LICENSE for full terms