promotional bannermobile promotional banner

Zeolite

Unseen level of Display Entity optimization
2026-08-07_20.26.22.png

2026-08-07_20.26.22.png

2026-08-07_20.26.05.png

2026-08-07_20.26.05.png

Description

⚡ Zeolite ⚡

Unseen level of Display Entity optimization

⚠️ Early Alpha — this project is at an early stage of development, bugs may be frequent for now!

Optimization showcase

🚀 Optimizations 🚀

#OptimizationWhat it doesFPS win
1UBO instancing (dynamic tier)One draw renders every display of a model via instanced UBO records58 → 1323 (~23×)
2Static tier bakingStable displays bake into combined buffers, one draw per material, zero per-frame CPU~0 CPU/frame at 10000 displays
3GPU animation textureKeyframe lerps evaluate on the GPU, no per-frame CPU work26 → 625 (~24×)
4Animation loop lock-onRepeating cycles become self-running GPU loop programs0 uploads while locked
5Coalesced uploads + stream ringDirty ranges merge and stream through a persistent-mapped ring491 → 625 (+27%)
6Content-based resync filterDeep compare stops identical server resyncs from forcing rebakes0 false rebakes
7Mesh capture cache + canonical head modelEach state bakes once; all heads share one skull mesh24 → 1712 (~71×)
8Head skin atlasAll skins live in one atlas, so heads stay a single drawEnables #7 / #14
9Glint canonicalizationGlint renders as a second layer, not a second model39 → 1549 (~40×)
10Text glyph instancingGlyphs are compact instanced records in per-bucket UBOs20 → 116 (~6×)
11Instanced shadowsGround shadows pool into a few instanced draws49 600 pieces, no extra draws
12Two-level cullingCPU frustum per draw group + per-instance GPU cullDraws → 0 when looking away
13Origin-relative coordinatesPositions stored relative to a rebased render originFloat precision at far coords
14Shaded static pipelines (Iris)Batches re-bake into the pack's own gbuffer programs19 → 280 (~15×)
15Resident rebake under packAnimating batches rewrite in place instead of demotingStays 1 draw under packs
16Promotion budget + light bandsPromotion caps and distance-staggered light refreshNo hitch frames

🌈 Shader Support 🌈

Zeolite stays batched under Sodium + Iris — shaded static pipelines (#14) and resident rebake (#15) keep displays in a few draws even with a pack active.

Making this possible comes with some FPS costs:
CostWhyImpact
Sodium + Iris installed (shaders OFF)The mods wrap the render pipeline even with no pack active — this is their own overhead, not Zeolite's~20–30% FPS
Shader pack activeThe pack's gbuffer/shadow programs are inherently expensive; the shaded static tier recovers most of it19 → 280 (~15×) with Zeolite

Small visual regressions are possible on batched displays under shader packs:

Visual regression showcase

📦 Supported Versions 📦

VersionStatus
1.21.11✅ Supported
26.1🚧 Possible in near future
26.2❌ Unlikely due to Vulkan

🛠️ Modloader Support 🛠️

ModloaderStatus
Fabric✅ Supported
NeoForge❌ Won't be supported

💬 Community & Support 💬

If you have questions or suggestions, tell us about them on our Discord server!

🐛 Found a bug? Report it on the Issue Tracker!

The Zeolite Team

profile avatar
  • 1
    Followers
  • 5
    Projects
  • 234
    Downloads

More from GitGilev_View all